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

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

这次跟大家分享一下我对适配器模式的理解。

适配器模式的定义:

将一个类的接口转换成用户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类,可以一起工作了。

举个我们日常生活中的例子: 

有一部移动电源,有一部iphone一部android手机,需要充电使用普通的Usb线就可以给android手机充电,而在给iphone充电的时候必须使用适配iphone的万能转接头才能充电。

iphone和android就相当于两个不兼容的接口,转接头就相当于一个适配器,他使得iphone和android手机都能充电了。

在我们的项目中可以这样是用适配器模式:

加入我们开发一个发说说动态的功能,第一版要求可以发送文字,实现如下:

public interface ISendTextPost{    public void sendTextPost();}public class SendTextPost implements ISendTextPost{    public void sendTextPost{        //发送文字动态    }}

实现方式如上所述,很简单。如果第二版要求既可以发图片也可以发文字动态,实现如下:

public interface ISendPicturePost{    public void sendTextPost();    pubiic void sendPicturePost();}    //假如发文字和图片是这样的~~public class SendPicturePost implements ISendPicturePost{    public void sendTextPost{        //发送文字动态    }    public void sendPicturePost{        //发送图片动态    }}

上述方法实现是否有问题?肯定是不行的,因为发送文字的方法之前已经实现了,完全没必要再去实现一次。如果重复的方法有很多呢,这样肯定不行了。

对于这种接口不兼容的问题,使用适配器模式可以很好的解决:

适配器模式的模型如下:

/** 用户所需功能接口 target1*/public interface ITarget1{    public void doTarget1();}//target1实现类public class Target1Impl implements ITarget1{    public void doTarget1(){        //做A事情    }}/** 用户所需功能接口 target2*/public interface ITarget2{    public void doTarget2();}//target2实现类public class Target2Imp implements ITarget2{    public void doTarget2(){        //做B事情    }}/** 适配器*/public class Adapter implements ITarget1, ITarget2{    private ITarget1 target1;    private ITarget2 target2;        public Adapter(ITarget1 target1,ITarget2 target2){        this.target1 = target1;        this.target2 = target2;    }        public void target1(){        //做A事情        target1.doTarget1();    }        public void doTarget2(){        //做B事情        target2.doTarget2();    }}//Client public class Client {    public static void main(Sting[] args){        ITarget1 target1 = new Target1Impl();        ITarget2 target2 = new Target1Imp2();                Adapter adapter = new Adapter(target1,target2);        adapter.doTarget1();        adapter.doTarget2();    }}

上面就是使用适配器的实现方式。在上述的实现方式中,target1和target2都是业务层面的接口,他们有不同的业务功能,对于客户端来说,调用target1接口时很正常,但是要兼容target2的功能的时候,就需要有一个类实现target1 的功能,并且兼容了target2功能的类,Adapter就是这样的一个类,他就是一个转换器,兼容不同的接口来实现功能。

     在上面的实现中,实质上是使用对象组合来实现业务功能的兼容。使用适配器可以使已有功能复用,加快开发效率,减少维护成本,在Adapter中也可以加入一些自己实现的公用方法,这样可以使得Adapter的功能更强大。在一个系统中不应该过多的使用Adapter类,如果不是很有必要则不需要使用,使用过多,会使得系统变得凌乱,不好把握,明明调的是A接口但是返回的是B结果。 

    适配器模式的最重要的一点就是,对象组合,转换匹配,复用功能。

转载于:https://my.oschina.net/tedyin/blog/224207

你可能感兴趣的文章
DotNet(C#)自定义运行时窗体设计器 一
查看>>
P2627 修剪草坪[dp][单调队列]
查看>>
JS详细入门教程(上)
查看>>
Android学习笔记21-ImageView获取网络图片
查看>>
线段树分治
查看>>
git代码冲突
查看>>
lnmp1.3 配置pathinfo---thinkphp3.2 亲测有效
查看>>
查看Linux 系统的配置和增减用户/增减组/增减权限
查看>>
利用android studio 生成 JNI需要的动态库so文件
查看>>
poll
查看>>
衡量优秀的卓越的前端工程师
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
flutter进行自动编译操作步骤
查看>>
4.6 直接插入排序法
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
盘点国内外那些有野心的BI公司
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
m5-第9周作业
查看>>