设计模式—适配器模式
适配器模式是一种结构性设计模式,它能使接口不兼容的对象能够相互合作。适配器通过封装对象将复杂的转换过程隐藏于幕后。被封装的对象甚至察觉不到适配器的存在。适配器不仅可以转换不同格式的数据,其还有助于采用不同接口的对象之间的合作。它的运作方式如下:
- 适配器实现于其中一个对象兼容的接口
- 现有对象可以使用该接口安全调用适配器方法
- 适配器方法被调用后将以另一个对象兼容的格式和顺序将请求传递给对象
1.代码实现
生活例子:现在有一个轻薄本想要连接网线来上网,但是没有网线接口,所以我们需要买一根转换器来连接网线让我们上网
-
创建一个电脑类
public class Computer { public void net(NetToTypeC netToTypeC){ //找一个转接头连接上网 netToTypeC.handleRequest(); } }
-
创建一个被适配的类:网线
public class ReticleAdapted { public void request(){ System.out.println("连上网线上网"); } }
-
创建一个转换器接口
public interface NetToTypeC { //作用:处理请求 public void handleRequest(); }
-
创建真正的适配器
public class Adapter implements NetToTypeC{ private ReticleAdapted reticleAdapted; public Adapter(ReticleAdapted reticleAdapted) { this.reticleAdapted = reticleAdapted; } @Override public void handleRequest() { reticleAdapted.request(); } }
-
测试
public static void main(String[] args) { //电脑 网线 转换器 Computer computer = new Computer(); ReticleAdapted reticleAdapted = new ReticleAdapted(); Adapter adapter = new Adapter(reticleAdapted); computer.net(adapter); }
2.适配器适用性
-
当你希望使用某个类,但是其接口与其他代码不兼容时,可以使用适配器类
适配器模式允许你创建一个中间层类,其可以作为代码与遗留类,第三方类或提供怪异接口的类之间的转换器
-
当你希望复用多个由于缺少相同功能而无法被添加到已有子类时,可以使用该模式
你可以扩展每个子类,将缺少的功能添加到新的子类中。但是你必须在所有新子类中重复添加这些代码,这样会使得代码有臃肿
将缺失功能添加到一个适配类中是一种解决方案。然后你可以将缺少功能的对象封装在适配器中,从而动态的获取所需功能。如果要这一点正常运作,目标类必须要有通用的接口,适配器的成员变量应当遵循该通用接口,这种模式与装饰模式非常相似
3.对象适配器优点
- 一个对象适配器可以把多个不同适配者适配到同一个目标
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据里氏替换原则,适配者子类也可通过该适配器适配