设计模式之适配器模式案例详解

基本介绍

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。

适配器模式属于结构性模式,主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。

类适配器模式

什么是类适配器模式

类适配器模式介绍:Adapter类,通过集成src类,实现dst类接口,完成src>dst的适配。

应用实例

案例

以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电相当于src(即被适配者),我们的dst(即目标)是5V直流电。

思路分析

代码实现

1//被适配的类2public class Voltage220V {3    //输出220V的电压4    public int output220V(){5        int src=220;6        System.out.println("电源电压="+src+"伏");7        return src;8    }9}

1//适配接口2public interface IVoltage5V {3    int output5V();4}

1public class VoltageAdapter extends Voltage220V implements IVoltage5V {2    @Override3    public int output5V() {4        int srcV = output220V();//获取220V的电压5        int dstV = srcV / 44;//进行处理6        return dstV;7    }8}

 1public class Phone { 2    //充电 3    public void charging(IVoltage5V iVoltage5V){ 4        if (iVoltage5V.output5V()==5){ 5            System.out.println("现在电压为5V,可以充电"); 6        }else if (iVoltage5V.output5V()>5){ 7            System.out.println("现在电压大于5V,可以充电"); 8        } 9    }10}

1public class Client {2    public static void main(String[] args) {3        Phone phone = new Phone();4        phone.charging(new VoltageAdapter());5    }6}

类适配器模式注意事项和细节

Java是单继承机制,所以类适配器需要继承src类这一点算是一个缺点,因为这要求dst必须是接口,有一定局限性。

src类的方法在Adapter中都会暴露出来,也增加了使用的成本。

由于其继承了src类,所以它可以根据需求重写src类的方法,使得Adapter的灵活性增强了。

对象适配器模式

什么是对象适配器模式

基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题。即:持有src类,实现dst类接口,完成src>dst的适配。

根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系。

对象适配器模式是适配器模式常用的一种。

应用实例

案例

以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电相当于src(即被适配者),我们的dst(即目标)是5V直流电,使用对象适配器模式完成。

思路分析

代码实现

 1public class VoltageAdapter implements IVoltage5V { 2 3    private Voltage220V voltage220V; 4 5    //通过构造器传入 6    public VoltageAdapter(Voltage220V voltage220V) { 7        this.voltage220V = voltage220V; 8    } 910    @Override11    public int output5V() {12        int dst = 0;13        if (null != voltage220V) {14            int src = voltage220V.output220();15            dst = src / 44;16        }17        return dst;18    }19}

1public class Client {2    public static void main(String[] args) {3        Phone phone = new Phone();4        phone.charging(new VoltageAdapter(new Voltage220V()));5    }6}

对象适配器注意事项和细节

对象适配器和类适配器其实算是同一种思想,只不过实现方式不同。根据合成复用原则,使用组合替代继承,所以它解决了类适配器必须继承src的局限性问题,也不再要求dst必须是接口。

使用成本更低更灵活。

接口适配器模式

什么是接口适配器模式

当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求。

适用于一个接口不想使用其所有的方法的情况。

应用实例

思路分析

代码实现

1public interface Interface4 {2    void m1();3    void m2();4    void m3();5    void m4();6}

 1//在AbsAdapter中我们将Interface4的方法进行默认实现 2public abstract class AbsAdapter implements Interface4 { 3    @Override 4    public void m1() { 5    } 6 7    @Override 8    public void m2() { 9    }1011    @Override12    public void m3() {13    }1415    @Override16    public void m4() {17    }18}

 1public class Client { 2    public static void main(String[] args) { 3        AbsAdapter absAdapter= new AbsAdapter(){ 4            @Override 5            public void m1() { 6                System.out.println("使用了m1的方法"); 7            } 8        }; 9        absAdapter.m1();10    }11}

适配器模式的注意事项和细节

三种命名方式是根据src是以怎样的形式给到Adapter(在Adapter里的形式)来命名的。

  • 类适配器:以类给到,在Adapter里,将src当做类,继承。
  • 对象适配器:以对象给到,在Adapter里,将src作为一个对象,持有。
  • 接口适配器:以接口给到,在Adapter里,将src作为一个接口,实现。

Adapter模式最大的作用还是将原本不兼容的接口融合到一起工作。
实际开发中,实现起来不拘泥于我们讲解的三种经典形式。

(0)

相关推荐

  • 如何学习23种设计模式及其思想?

    感觉设计模式是看着简单 ,但是一用就不会,23种设计模式,学的人头大,相信大家都是这样的 设计模式在程序员的面试中会被考到,通常是介绍其原理并说出优缺点.或者对比几个比较相似的模式的异同点.在笔试中可 ...

  • 设计模式(七)——适配器模式(SpringMVC框架分析)

    适配器模式1 现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了. 2 基本介绍1) 适配器模式(Adapter Pattern)将某个类的接口 ...

  • 设计模式-适配器模式

    生活中的例子 如上图所示,生活中适配器无处不在,如电源适配器,读卡器,甚至多转接头读卡器等,都是很常见的例子,它们的目的都是将原本不能一起工作的部件能够在一起工作. 在软件工程领域的适配器也是同样类似 ...

  • 责任链设计模式案例详解,看这一篇就够了

    老哥哔哔哔 责任链设计模式在日常工作中很常见,也很重要,很多开源框架都采用了责任链设计模式,比如:servlet中的Filter.Dubbo中的Filter.Mybatis中的Plugin.sprin ...

  • 六爻占卜测疾病案例详解:测疾病案例汇总

    ​了验证笔者的立论,特举一些实际例子来辅助说明,同时也录用一些其它书中测病的卦例用笔者的理论来验证是否同样适用.实践是检验真理的唯一标准,实际例子是最有力的说明. 下面请看测病卦例. 例一,某儿媳测公 ...

  • 案例详解:各种促销活动全套账务处理(含税务处理)

    企业经常会有促销.打折.赠送等活动,本文分别举例各种情形,一一列示相应会计分录. 注1:下述标价.价值.价款等,若无特别指出,皆为含(增值)税金额. 一.满减 甲公司大型商场,增值税一般纳税人.&qu ...

  • 重磅: 史上最全上市公司经典商业模式及案例详解(从未如此详尽)

    这个世界上有很多公司,是靠商业模式赚钱的. 比如Uber.滴滴,几乎不拥有出租车,却是市场上最大的出租车公司. 比如携程,作为线上旅游代理机构,对现在中国酒店业的掌控非常强大,甚至可以操纵价格. 再比 ...

  • 索尼微单的对焦操作你真的会用么?案例详解所以微单对焦系统

    这些年,索尼微单的用户越来越多.除了一部分萌新之外,更多的是从单反阵营转过来.周围不少朋友虽然用着索尼微单,但是依然是保持着单反的操作习惯.倒也不是不行,只是在索尼微单上,有着自己的一套操作逻辑.若还 ...

  • 史上最全证据实务要点难点及案例详解(含微信/邮件/短信等)

    众所周知,打官司打的就是证据,要想法官支持你的诉求,就要有证据来证明你的所说所做.证据是案件中的灵魂,证据问题是诉讼的核心问题,全部诉讼活动实际上都是围绕证据的搜集和运用进行. 证据在民事诉讼江湖中绝 ...

  • 案例详解什么是合法调岗?

    用人单位可以依据法律规定.劳动合同约定或规章制度规定给员工调岗调薪,但是由于调岗涉及员工的切身利益,调岗调薪不仅需要有合法的事由,还要履行法定的程序,如果用人单位调岗操作不当,极易引发劳资纠纷.那么, ...

  • 案例详解|新租赁会计准则对承租方财务实操的影响

    作者|余光瑞 本文原载于<财务管理研究>2020年第3期 2018年12月7日,财政部正式修订并发布<企业会计准则第21号--租赁>(以下称"新租赁准则") ...

  • 财务总监精心整理:100个避税技巧 180个筹划案例详解,牛

    今天给大家分享的是我们财务总监精心整理的100个企业合理避税的技巧和180个企业税务筹划案例详解的资料,让你从真实发生的案例方面来讲解,十分的详细,让人一目了然.特别的好记又好学.真是太牛了![文末可 ...