结构就是力量,在所有的模式中我觉得有最充满魔力的模式。
【结构模式】
适配器(Adapter)模式:“把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作”[1]这种模式主要用于两端既有代码的二进制兼容。
合成(Composite)模式:Java对这个模式进行了语法支持,就是子类覆盖了父类的方法后,当父类引用其实指向的是子类实例的时候,调用覆盖的这个方法会直接调用。
装饰(Decorator)模式:装饰模式是关联的一种典型的应用。可以在不改变既有大部分方法的情况下进行某些个方法的修改而对外没有逻辑上的影响。是一种很好的扩展对象的方式。
代理(Proxy)模式:两个类继承一个接口其中一个类关联另一个类(即后者是前者的成员),前者就是代理。通过代理去操作具体对象。这样我们可以在具体操作之前之后做一些特殊处理。看起来像是Hook。这样作起码有一个好处可以将预处理和后续处理隐藏,除了为了扩展,对客户端用户也可以提供一些方便(不用自行做预处理和做后继处理)。
享元模式/羽量级模式(Flyweight Pattern):一些共享的小对象,所以会有两个译名,一个直译一个意译。一个对象具有两个主要状态,一个是内部状态,一个是外部状态。内部状态不变且可以共享,而外部状态随着传入参数的不同而不同。比如字和字体的关系。字体对于字来说就是外部状态。
门面(Facade)模式:这个比较简单,就是子系统对外的统一“接口”,设计时最好以行为进行划分,不要让客户端过分了解无关细节。
桥梁(Bridge)模式:这个东西刚一开始误以为跟策略模式没啥区别,后来仔细一看才发觉差的特别远。一个是对行为模式一个是结构模式。桥梁模式是在父类搭建好组合/聚合关系,具体等待未来子类的实现调用关系。是聚合关系的一种典型应用。