意图:将一个类的接口转换成客户希望的另外一个接口。该模式使原本由于接口不兼容而不能一起工作的那些类可用一起工作。
问题: 一个系统拥有正确的数据和行为,但接口确实错误。典型用途:你必须把某些东西实现为我们定义或已经拥有的抽象类的派生类。
解决方案:Adapter模式用我们需要的接口对无法修改的类进行包装。
参与者与协作者: Adapter对Adaptee的接口进行适配,使它与Target(Adapter派生自它)相匹配。让Client把Adaptee当作Targer的一个类型来使用它。
效果:Adapter模式让现存的对象适应新的类结构,而不受他们的接口限制。
实现:将现存的类包含在另外一个类之中,包容类与需要的接口相匹配,并调用被包容类的方法。
适用范围:
(1) 现存类已实现的那些功能可以被适配。
(2) 现存对象没有实现的那些对象可以在适配对象中实现。
适配器Adapter模式的类型(取决于问题领域的不同约束):
(1)对象模式:上述Adapter模式叫做对象模式,因为它依赖于一个对象(适配对象)包含另外一个对象(被适配对象)。
(2)类Adapter模式:实现Adapter模式的另外方式就是使用多重继承。
外观模式与适配器模式的比较:(外观模式简化接口,适配器模式将接口转换成现有的接口。)
项目 |
外观模式 |
适配器模式 |
是否有现存的类 |
是 |
是 |
是否我们必须针对某个接口进行设计 |
否 |
是 |
一个对象是否需要多态行为 |
否 |
可能 |
是否需要一个更简单的接口 |
是 |
否 |