分类
结构型设计模式可以分为两种模式:
一、结构型类模式:Adapter
二、结构型对象模式:Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy
概念
结构型设计模式着重的是如何组合类和对象以获得更大的结构,该模式有助于多个独立开发的类库协同工作。
(1)结构型类模式:该模式采用继承机制来组合接口或实现。一个简单的例子,采用多重继承方法将两个以上的类组合成一个类,结果这个类包含了所有父类的性质。
(2)结构型对象模式:该模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。
结构型类模式
一、适配器模式(Adapter)
- Adapter模式的意图是将一个类的接口转换成客户希望的另外一个接口。
使得原本不能兼容的两个接口可以一起工作。就好比一个不会英语的中国人与一个不会中文的外国人对话一样,如何才能让他们一起并肩工作?除了让他们花时间自己学习对方的语言外,我们还可以提供给他们一个翻译官,这个翻译官起到的作用就是适配器起到的作用。
Adapter模式的别名为Wrapper包装器模式,它不仅仅属于结构型类模式,它也属于结构型对象模式。
二、类适配器结构图
1.Target定义了Client使用的接口,该接口与特定领域相关(比如语言)
2. Client与符合Target接口的对象协同
3. Adaptee定义了一个已经存在的接口,并且这个接口需要适配
4. Adapter对Adaptee的接口与Targe接口进行适配
三、适用于
- 想使用一个已经存在的类,而它的接口不符合要求
个人理解:好比你想使用英文交流跟外国人交流,但是你却不会,这是你可以依靠一个翻译来帮你。 - 想创建一个可以服用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
个人理解:创建的这个可以服用的类就是Adapter适配器,将其他不相关的语言,通过这个类让他们顺利沟通。 - (仅使用于对象Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
个人理解:这个之前跟朋友撕扯了很久,对于这句话的解释为我们想使用一个已经存在的子类(该子类接口不符合要求),但是我们不可能对每一个需要使用到这个子类的行为都进行让它的父类子类化的方式以匹配接口,so我们就需要用到一个适配器。
结构型对象模式
一、桥接模式(Bridge)
- Brige桥接模式的意图是将抽象部分与其实现部分分离,使它们都可以独立地变化。
- 合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。
适用于:
- 不希望在抽象和它的实现部分之间有一个固定的绑定关系。
个人理解: - 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
个人理解: - 对一个抽象的实现部分的修改应对客户不产生影响。
个人理解: - (C++)想对客户完全隐藏抽象的实现部分
个人理解: - 有许多类要生成的类层次结构
个人理解: - 想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
个人理解:
二、组合模式(Composite)
- Composite组合模式的意图是将对象组合成树型结构以表示“部分-整体”的层次结构。
未完待续