概念
适配器模式是将一个类的接口,转换成客户期望 的另一个接口。适配器让原来接口不兼容的类可以合作。
实现
- 类图:
对象适配器
类适配器
Target:
1 | package com.littlehui.design.adapter.target; |
Adapter
1 | package com.littlehui.design.adapter.source; |
Adaptee
1 | package com.littlehui.design.adapter.source; |
ConcreteTarget
1 | package com.littlehui.design.adapter.target; |
Client:
1 | package com.littlehui.design.adapter; |
以上利用组合的方式,以修改的接口包装适配者。这种实现方式称之为对象的适配器。它带来的有点是:被适配者的任意子类,都可以搭配适配器使用。
场景
以Java举例,早先JDK里使用了枚举器(Enumeration)随着版本的更迭后来被 迭代器(Iterator)取代了。为了兼容之前的接口,枚举器仍然被保留着。
并且枚举器添加了删除元素的接口。如果遇到保留着 枚举器的客户端代码,依赖于枚举接口,完全可以使用适配器模式将迭代器转换成枚举。
总结
设计模式的原则有一条:组合优于继承。体现在适配器模式上就有两种适配方式。组合的称之为 对象时适配模式,继承的称之为对象适配模式。组合的有点是
不仅可以适配某个类,还可以适配这个类的子类属于垂直扩展。类适配器不需要重新实现整个适配者。必要的时候覆盖被适配行为就可以。两种各有优劣。站在
java的角度思考,类适配多更需要多继承的方式(虽然也可以用接口)。java不支持多继承。所以 建议使用对象适配。既组合。