IOS设计模式学习(16)装饰
2013-07-03 20:35
267 查看
1 前言
在面向对象软件中,向对象添加“东西”(行为),而不破坏其原有风格,因此增强了的对象是同一个类的加强版。任何“增强”均可以动态添加和删除。我们把这个设计模式叫做“装饰”,装饰对象可以附加到另一个装饰对象,也可以附加到原始对象,对其功能进行扩展,同时保留原始行为不受影响。
2 详述
2.1 简述
动态的给一个对象太添加一些额外的职责。就扩展功能来说,装饰模式相比生成子类更为灵活。
2.2 何时使用
(1)想要在不影响其他对象的情况下,以动态,同名的方式给单个对象添加职责。
(2)想要扩展一个类的行为,却做不到。类定义可以被隐藏,无法进行子类化;或者,对累的每个行为的扩展,为支持每种功能组合,将产生大量的子类。
(3)对类的职责的扩展是可选的。
2.3 Objective-C范畴与装饰模式
范畴是一个Objective-C的语言功能,通过它可以向类添加行为(方法的接口与实现),而不必进行子类化。通过范畴添加的方法对类原有的方法没有不良影响。范畴中得方法成为了类的一部分,并可由其子类继承。
但这并不是一种严格的装饰模式的实现,它实现了模式的意图,但却是一种变体。由装饰器范畴添加的行为是编译时绑定的,虽然Objective-C原本支持动态绑定。而且装饰器范畴实际上没有封装被扩展类的实例。
但是事先少量的装饰器的时候,它比真正子类方式更为轻量,容易。
3 结语
以上是所有内容,希望对大家有所帮助。
在面向对象软件中,向对象添加“东西”(行为),而不破坏其原有风格,因此增强了的对象是同一个类的加强版。任何“增强”均可以动态添加和删除。我们把这个设计模式叫做“装饰”,装饰对象可以附加到另一个装饰对象,也可以附加到原始对象,对其功能进行扩展,同时保留原始行为不受影响。
2 详述
2.1 简述
动态的给一个对象太添加一些额外的职责。就扩展功能来说,装饰模式相比生成子类更为灵活。
2.2 何时使用
(1)想要在不影响其他对象的情况下,以动态,同名的方式给单个对象添加职责。
(2)想要扩展一个类的行为,却做不到。类定义可以被隐藏,无法进行子类化;或者,对累的每个行为的扩展,为支持每种功能组合,将产生大量的子类。
(3)对类的职责的扩展是可选的。
2.3 Objective-C范畴与装饰模式
范畴是一个Objective-C的语言功能,通过它可以向类添加行为(方法的接口与实现),而不必进行子类化。通过范畴添加的方法对类原有的方法没有不良影响。范畴中得方法成为了类的一部分,并可由其子类继承。
但这并不是一种严格的装饰模式的实现,它实现了模式的意图,但却是一种变体。由装饰器范畴添加的行为是编译时绑定的,虽然Objective-C原本支持动态绑定。而且装饰器范畴实际上没有封装被扩展类的实例。
但是事先少量的装饰器的时候,它比真正子类方式更为轻量,容易。
3 结语
以上是所有内容,希望对大家有所帮助。
相关文章推荐
- 设计模式学习之装饰器模式
- java 设计模式 学习笔记(5) 装饰模式
- java学习笔记-设计模式16(观察者模式)
- 设计模式学习系列七:装饰模式(Decorator)
- IOS设计模式第四篇之装饰设计模式的类别设计模式
- 设计模式学习--装饰
- 设计模式深入学习IOS版(1)基础篇之类关系
- IOS设计模式学习(6)生成器
- iOS设计模式(MVC和单例模式,门面和装饰器模式,适配器和观察者模式以及备忘录和命令模式)
- iOS设计模式学习实例
- 设计模式学习16 Mediator
- 黑马程序员 java学习笔记3-IO流之字节流与装饰设计模式
- 学习设计模式第十二 - 装饰(者)模式
- “设计模式”学习之三:适配器、装饰模式
- 设计模式深入学习IOS版(8)架构设计
- 设计模式学习笔记(16)——观察者模式
- HeadFirst 设计模式学习笔记16--享元模式拾零
- IOS设计模式学习(8)适配器
- iOS设计模式之二:外观模式和装饰器模式
- java设计模式学习之装饰模式