结构型模式:将类/对象组合成更大的结构(搭积木)
类结构型 | 类的组合 | 只存在继承关系和实现关系 |
对象结构型 | 类与对象的组合 | 关联关系(在一个类中定义另一个类的实例对象,通过该对象调用其方法) |
第10章 适配器模式
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。
1.模式动机
使接口不兼容而不能交互的类可以一起工作(电源适配器)
2. 四个角色
- 目标抽象类(Target):定义客户要用的特定领域接口,可以是抽象类/接口/具体类;在类适配器中,由于Java不支持多重继承,它只能是接口
- 适配器类(Adapter):调用另一个接口,作为一个转换器对Adaptee和Target进行适配。
类适配器:实现Target接口,继承Adaptee
对象适配器:继承Target,关联Adaptee
- 适配者类(Adaptee):被适配的角色,定义一个已经存在的接口,这个接口需要适配;一般是具体类,包含了客户希望使用的业务方法
- 客户类(Client):针对目标抽象类进行编程,调用在目标抽象类重定义的业务方法。
3.适用环境
- 系统需要使用现有的类,而这些类的接口不符合系统的需要
- 想建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作
4.共同优点
- 将目标类和适配者类解耦,引入适配器类重用适配者类,而无需修改原有代码
- 增加类透明性和复用性,将具体实现封装在适配者类中
- 灵活性和扩展性,符合“开闭原则”
5.类适配器
优点:可在适配器类中置换一些适配者的方法
缺点:Java、C#等不支持多重继承,一次最多一个适配者类,且目标抽象类只能为接口,不能将一个适配者类和它的子类都适配到目标接口
6.对象适配器
优点:把多个不同的适配者适配到同一个目标(把适配者和它的子类...)
缺点:需要置换适配者类方法时,要创建适配者子类,并把子类当作真正的适配者