博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
23种设计模式之适配器模式代码实例
阅读量:4693 次
发布时间:2019-06-09

本文共 3004 字,大约阅读时间需要 10 分钟。

适配器模式属于七种结构性模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)之一:

适配器模式又分三种:类的适配器模式、对象的适配器模式、接口的适配器模式。

 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

先看类的适配器模式

核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码:

public class Source {        public void method1() {          System.out.println("this is original method!");      }  }
public interface Targetable {                /* 与原类中的方法相同 */          public void method1();                /* 新类的方法 */          public void method2();      }
public class Adapter extends Source implements Targetable {                @Override          public void method2() {              System.out.println("this is the targetable method!");          }      }

下面是测试类:

public class AdapterTest {                public static void main(String[] args) {              Targetable target = new Adapter();              target.method1();              target.method2();          }      }

输出:

this is original method!this is the targetable method!

这样Targetable接口的实现类就具有了Source类的功能。

对象的适配器模式

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。看图:

public class Wrapper implements Targetable {                private Source source;                    public Wrapper(Source source){              super();              this.source = source;          }          @Override          public void method2() {              System.out.println("this is the targetable method!");          }                @Override          public void method1() {              source.method1();          }      }

测试类:

public class AdapterTest {                public static void main(String[] args) {              Source source = new Source();              Targetable target = new Wrapper(source);              target.method1();              target.method2();          }      }

接口的适配器模式:

有时候我们写的接口里面有多个抽象方法,我们写实现类的时候,必须全部实现这些抽象方法,有时候没有必要,可以借助抽象类来解决,

这个抽象类实现该接口,我们一个实体类继承该抽象类就不用重写全部的接口里的方法了。

public interface Sourceable {                    public void method1();          public void method2();      }
public abstract class Wrapper2 implements Sourceable{                    public void method1(){}          public void method2(){}      }
public class SourceSub1 extends Wrapper2 {          public void method1(){              System.out.println("the sourceable interface's first Sub1!");          }      }
public class SourceSub2 extends Wrapper2 {          public void method2(){              System.out.println("the sourceable interface's second Sub2!");          }      }
public class WrapperTest {                public static void main(String[] args) {              Sourceable source1 = new SourceSub1();              Sourceable source2 = new SourceSub2();                            source1.method1();              source1.method2();              source2.method1();              source2.method2();          }      }

输出:

the sourceable interface's first Sub1!the sourceable interface's second Sub2!

 

转载于:https://www.cnblogs.com/longhaolove/p/7885504.html

你可能感兴趣的文章
Matlab画图-非常具体,非常全面
查看>>
浏览器同源策略及其规避方法
查看>>
ReactJS入门
查看>>
linux网站配置文件.htaccess伪静态转换到IIS web.config中
查看>>
CodeForces 1B
查看>>
win10应用UserControl
查看>>
Magento开发文档(二):Magento配置
查看>>
用递归的方法,判断某个字符串是否为回文
查看>>
[LeetCode] 100. Same Tree Java
查看>>
BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
查看>>
查看手机已经记住的WIFI密码
查看>>
Linux实战教学笔记24:SSH连接原理及ssh-key
查看>>
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...
查看>>
Windows下命令(bat可用)
查看>>
我是怎么用缠论在商品里边抢钱之二 (2019-07-12 15:10:10)
查看>>
python入门之正则表达式
查看>>
SAS学习经验总结分享:篇五-过程步的应用
查看>>
Android创建文件夹及文件并写入数据
查看>>
file的getPath getAbsolutePath和getCanonicalPath的不同
查看>>