AR8*_*R89 3 cocoa delegates design-patterns objective-c ios
我不止一次地读过Cocoa中使用的委托模式是Adaptern模式的实现(http://en.wikipedia.org/wiki/Adapter_pattern).它们共享相同的意图,即:让两个具有不兼容接口的对象相互协作.委托对象是适配器,因为它采用客户端所需的协议,需要协议并且对委托具有弱引用的类是客户端(因此,这将是Cocoa框架的一个类).我的问题是:谁是适应者?委托模式并没有包围任何对象,从我所看到的,谁是需要调整的对象?
代理实际上并不是适配器模式的示例.协议会更接近,但在Objective C中实现Adapter模式的最佳方法是创建一个新对象,其中包含您要调整的对象并使用它来为客户端提供服务.
类别是实现适配器模式的另一种方式,但它们有一些限制.您不能覆盖类别中现有方法的实现,也不能将其他实例变量添加到具有类别的类中.您所能做的就是添加新的实例方法.但是,这通常就足够了.
您还可以使用多重继承来实现适配器模式,例如提供它的C++语言,但Objective-C不支持多重继承.
使用我在项目中使用的类别的适配器的简单示例如下:
Interface Builder(IB)包含一个名为"用户定义的运行时属性"的功能,允许您使用键值编码(KVC)在自定义接口对象上设置属性.它允许您指定有限数量的数据类型(整数,浮点数,bool,点,rects,UIColors和其他一些数据类型.)您可以使用用户定义的运行时属性在视图的图层上设置边框宽度和角半径,以及你应该能够用它来改变图层的边框颜色或背景颜色.但是,图层颜色指定为CGColors,UIViews使用UIColors.由于IB仅接受用户定义的运行时属性中的UIColors,因此它不起作用.
为了解决这个问题,我创建了一个名为CALayer + setUIColor的CALayer类.它有2个方法,setBorderUIColor和setBackgroundUIColor.那些方法很简单.它们将UIColors作为输入,只需将UIColor转换为CGColor并设置图层的边框颜色或背景颜色.
您可以在我的github项目KeyframeViewAnimations中看到此类别的早期版本.
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |