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

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

hot3.png

设计模式 之 适配器模式

前言:之前关于设计模式中的创建型模式已经全部整理完毕,下面要开始整理结构型模式相关内容,希望各位不要错过。

说明:适配器模式用来衔接两个独立不相关的接口。比如电脑的USB接口,SD卡需要读卡器(适配器)才可以接入USB。

场景

现有如下两个接口

接口Old

public interface IDemoOld {    String getOld();}

接口New

public interface IDemoNew {    String getNew();}

但是由于某种原因,需要实现 IDemoNew ,但是还想使用 IDemoOld 具体实现的内容,又不想重构代码,这时候可以定义一个适配器类,继承想要使用的类,实现想要使用的接口

代码

先创建类 DemoOld 实现 IDemoOld 接口

public class DemoOld implements IDemoOld{    @Override    public String getOld(){        return "适配了DemoOld.getOld()方法";    }}

创建适配器 继承 DemoOld (继承想要使用的类)实现 IDemoNew (实现想要使用的接口)(第一种写法)

public class DemoNewAdapter extends DemoOld implements IDemoNew{    @Override    public String getNew(){        return getOld();    }}

当然,适配器也可以如下写法(第二种写法)

public class DemoNewAdapter2 extends DemoOld implements IDemoNew{    private DemoOld demoOld;    public DemoNewAdapter2(DemoOld demoOld){        this.demoOld = demoOld;    }    @Override    public String getNew(){        return demoOld.getOld();    }}

测试

public class TestMe {    public static void main(String[] args){        //第一种用法        IDemoNew demoNew = new DemoNewAdapter();        System.out.println(demoNew.getNew());        //第二种用法        demoNew = new DemoNewAdapter2(new DemoOld());        System.out.println(demoNew.getNew());    }}

输出如下:

适配了DemoOld.getOld()方法

优点

  • 想要使用某个类的方法,但是不想使用该类的接口,那么就可以通过使用适配器来实现该需求。
  • 易于扩展。

缺点

缺点就很明显了

  • 过度使用适配器,让系统更加的混乱,让程序的可读性变差,比如上面的案例中,命名实现了接口demoNew,却最终实际是实现了demoOld的方法。

总结

核心思想就在于适配器DemoNewAdapter的实现方式。当出现两个接口都想使用的时候,可以通过适配器来调解。

一般用在项目后期扩展或者修改的时候,是一种补偿模式。相信不会有人在项目开始时就使用的。

码云

博客

欢迎关注我的个人微信订阅号:(据说这个头像程序猿专用)

输入图片说明

转载于:https://my.oschina.net/gmarshal/blog/1816411

你可能感兴趣的文章
207. Course Schedule
查看>>
如何优化您的 Android 应用 (Go 版)
查看>>
Trie树实现
查看>>
Opencv无法调用cvCaptureFromCAM无法打开电脑自带摄像头
查看>>
Exception异常处理机制
查看>>
复杂的web---web中B/S网络架构
查看>>
编写文档的时候各种问题
查看>>
Eclipse里maven的project报Unbound classpath variable: 'M2_REPO/**/***/***.jar
查看>>
新旅程CSS 基础篇分享一
查看>>
查看内核函数调用的调试方法【原创】
查看>>
个人项目中遇到的问题
查看>>
byte与base64string的相互转化以及加密算法
查看>>
20145103 《Java程序设计》第3周学习总结
查看>>
ubuntu声音系统
查看>>
哈哈更新资源列表2
查看>>
冲刺第一周第五天
查看>>
Java 接口
查看>>
Android 微信第三方登录
查看>>
硬盘的读写原理
查看>>
实例 centos自动挂载、备份windows共享文件夹,并删除第7日前当天的备份
查看>>