将某个类/接口转换为client期望的其他形式。通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
每个子类实现不同的特性,为对象增加不同侧面的特性,对每一个特性构造子类,通过为委派机制增加到对象上。即使用到了子类型也使用到了委派 关于继承和装饰的对比 装饰器在运行时间由特点组成,继承在编译时间将特点进行组合。 装饰器由多种联合的对象组成,继承产生一个单一的,类型清晰地对象。 可以实现对于多种装饰器的混合和匹配,多种继承在概念上十分困难的。
客户端通过一个简化的接口来访问复杂系统内的功能。 提供一个统一的接口来取代一系列小接口调用,相当于对复杂系统做了一个封装,简化客户端使用。 便于客户端学习使用,解耦。
有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。
对于模板模式,做事情的步骤一样,但是具体方法不同。 所以对于共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。 使用继承和重写实现模板模式。
客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型,也就是说,不管对象被放进哪里,都应该提供相同的遍历方式。 客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型。