设计模式-结构型
一. 适配器模式
配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这个模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
实现方式是,适配器继承或依赖已有的对象,实现想要的目标接口。
需要注意的是: 适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。
二. 桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
桥接模式将继承关系转换为关联关系,并且这种关联关系是建立在抽象层,从而降低了类与类之间的耦合,减少了代码编写量。
例子:画图,这里有一个画笔,可以画正方形、长方形、圆形(这个大家都知道怎么做吧,我就不解释了)。但是现在我们需要给这些形状进行上色,这里有三种颜色:白色、灰色、黑色。这里我们可以画出3*3=9中图形:白色正方形、白色长方形、白色圆形……,到这里了我们几乎到知道了这里存在两种解决方案:方案一:为每种形状都提供各种颜色的版本。方案二:根据实际需要对颜色和形状进行组合。
使用场景:1、如果一个系统需要在构件的抽象化角色和具体化角色两者之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
三.过滤器模式
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
不过这样也算一种模式???
四. 组合模式
组合模式实现的最关键的地方是--简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
例子:手游引擎里面的各个组件可以相互组合,形成树状结构。
五. 装饰器模式
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
在这个模式中,装饰者和被装饰者会继承同一个基类,实现同一个接口。装饰者会依赖于被装饰者,然后装饰者之间也会相互依赖。在装饰的时候,装饰者会先调用前一个装饰者的装饰方法,再开始加上自己的装饰功能。
在我上一个手游项目中,我曾经用这个模式实现过一个弹提示框的功能,通过将提示框分为几个部分,每个部分都是一个装饰者,当我用代码实现了每个部分之后,再建立一个数字到每个类名的映射,策划就可以自己根据需要,配置自己需要的部分。
六. 外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这个没什么好说的,就是puremvc中的facade,就是向外为一个系统或者几个系统提供一些对外的接口。外界只与facade进行交互。
七. 享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
就是对象池的技术。
八. 代理模式
代理模式主要解决,在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
和其他模式的区别: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
完。