标签:.com 适配 多个 strong tail 对象 类适配器模式 图片 targe
一、定义
适配器模式,即定义一个包装类,用于包装不兼容接口的对象。
包装类=适配器
被包装的类=被适配的类
二、解决的问题
原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
三、模式原理
3.1 类适配器模式
类的适配器模式是把适配的类的API转换成为目标类的API。
在上图中可以看出:
冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。
解决方案:为使Target能够使用Adaptee类里的SpecificRequest方法,故提供一个中间环节Adapter类(继承Adaptee & 实现Target接口),把Adaptee的API与Target的API衔接起来(适配)。
3.2 举个例子:
步骤1、首先创建Target接口
public interface Target { //这是源类Adapteee没有的方法 public void Request(); }
步骤2、接着创建源类
1 public class Adaptee { 2 3 public void SpecificRequest(){ 4 } 5 }
步骤3、创建适配器
1 //适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。 2 public class Adapter extends Adaptee implements Target { 3 4 //目标接口要求调用Request()这个方法名,但源类Adaptee没有方法Request() 5 //因此适配器补充上这个方法名 6 //但实际上Request()只是调用源类Adaptee的SpecificRequest()方法的内容 7 //所以适配器只是将SpecificRequest()方法作了一层封装,封装成Target可以调用的Request()而已 8 @Override 9 public void Request() { 10 this.SpecificRequest(); 11 } 12 13 }
步骤5、使用具体的目标类
1 public class AdapterPattern { 2 3 public static void main(String[] args){ 4 5 Target mAdapter = new Adapter(); 6 mAdapter.Request(); 7 8 } 9 }
3.2 对象的适配器模式
在上图中可以看出:
冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。
解决方案:为使Target能够使用Adaptee类里的SpecificRequest方法,故提供一个中间环节Adapter类(包装了一个Adaptee的实例),把Adaptee的API与Target的API衔接起来(适配)。
步骤1、创建Target接口
1 public interface Target { 2 3 //这是源类Adapteee没有的方法 4 public void Request(); 5 }
步骤2、创建源类
1 public class Adaptee { 2 3 public void SpecificRequest(){ 4 } 5 }
步骤3、创建适配器类
1 class Adapter implements Target{ 2 // 直接关联被适配类 3 private Adaptee adaptee; 4 5 // 可以通过构造函数传入具体需要适配的被适配类对象 6 public Adapter (Adaptee adaptee) { 7 this.adaptee = adaptee; 8 } 9 10 @Override 11 public void Request() { 12 // 这里是使用委托的方式完成特殊功能 13 this.adaptee.SpecificRequest(); 14 } 15 }
步骤四、具体使用目标类
1 public class AdapterPattern { 2 public static void main(String[] args){ 3 //需要先创建一个被适配类的对象作为参数 4 Target mAdapter = new Adapter(new Adaptee()); 5 mAdapter.Request(); 6 7 } 8 }
四、适用的场景
参考:
https://blog.csdn.net/carson_ho/article/details/54910430
标签:.com 适配 多个 strong tail 对象 类适配器模式 图片 targe
原文地址:https://www.cnblogs.com/wylwyl/p/10496363.html