设计问题:谁来构造、构造什么、怎么添加新功能

关键词:本体、客体、构造、映射、功能。

别名:桥接变量、型变变量、容器变量、适配变量,构造变量;

目的:添加命名空间、添加新功能。

原则:不修改本体的实现。

原始版本:

在本体的扩展中,直接构造客体;客体的构造器输入参量为主体;

客体为具体类,直接完成本体想要完成的功能;

版本升级一:客体泛型化

目的:客体的功能实现脱离

// 客体

public final class YKKit<Base> {

public let base: Base

public init(_ base: Base) {

self.base = base

}

}

//构造器

public var yk: YKKit<Self>{

get { return YKKit(self) }

}

版本升级二:构造器泛型化(构造器功能分离)

// 定义泛型协议

public protocol YKKitCompatible {

associatedtype CompatibleType

var yk: CompatibleType { get }

}

// 协议的扩展

public extension YKKitCompatible {

public var yk: YKKit<Self>{

get { return YKKit(self) }

}

}

// 实现命名空间yk

extension String: YKKitCompatible {}

版本升级三:客体协议化

public protocol NamespaceWrappable {
associatedtype WrapperType
var hk: WrapperType { get }
static var hk: WrapperType.Type { get }
} public extension NamespaceWrappable {
var hk: NamespaceWrapper<Self> {
return NamespaceWrapper(value: self)
} static var hk: NamespaceWrapper<Self>.Type {
return NamespaceWrapper.self
}
} public protocol TypeWrapperProtocol {
associatedtype WrappedType
var wrappedValue: WrappedType { get }
init(value: WrappedType)
} public struct NamespaceWrapper<T>: TypeWrapperProtocol {
public let wrappedValue: T
public init(value: T) {
self.wrappedValue = value
}
}
extension String: NamespaceWrappable { }
extension TypeWrapperProtocol where WrappedType == String {
var test: String {
return wrappedValue
}
}

最新文章

  1. HTML 5 的自定义 data-* 属性和jquery的data()方法的使用
  2. spring 注解的优点缺点
  3. UISegmentedControl 控件
  4. TSql Top 用法
  5. PHP---TP框架---添加数据-----有三种方式
  6. C++11多线程教学(一)
  7. task_struct
  8. 转:栈和队列小知识【STL用法】
  9. Android网络编程要学的东西与Http协议学习
  10. MySQL高性能优化实战总结!
  11. [20171211][转载]如何实现dbms_output输出没有打开serveroutput on.txt
  12. ftpdata目录下日期目录权限问题
  13. MapReduce处理气象数据
  14. Java十进制数转二进制的方法
  15. hadoop三个配置文件的参数含义说明(转)
  16. springboot----&gt;集成mybatis开发(二)
  17. [转]KMP 算法
  18. 第九次,mp3
  19. leetcode47. Permutations II
  20. jquery实现表单验证简单实例

热门文章

  1. web综合案例01
  2. jquery json实现省市级级联
  3. Luogu P2480 [SDOI2010]古代猪文 卢卡斯+组合+CRT
  4. 牛客练习赛43F(推式子)
  5. 035 Search Insert Position 搜索插入位置
  6. LeetCode 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  7. ros indigo install
  8. 机器学习读书会的分享 - Reinforcement Learning: An Introduction 第4-6章
  9. (转)Word快捷键大全 Word2013/2010/2007/2003常用快捷键大全
  10. 深入V8引擎-Time核心方法之win篇(2)