zoukankan      html  css  js  c++  java
  • 亲身实践,JAVA最优良的Adapter模式适配器模式

    网上关于JAVA的适配器模式例子有很多,但真的有少实在不怎么样,看也不懂。自己总结了一个在性能和结构上都很容易理解的Adapter模式。



    Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式。

    在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:
    我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,随着对外部组件库的替换,可能需要对引用该外部组件的源代码进行大面积的修改,因此也极可能引入新的问题等等。如何最大限度的降低修改面呢?
    Adapter模式就是针对这种类似需求而提出来的。

    Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。


    实现Adapter模式的2种方法与范例
    Adapter模式通过在Adapter类中调用外部组件来实现功能。
    根据调用方式的不同,Adapter模式有2种实现方法:
    1,通过继承实现Adapter


    2,通过委让实现Adapter


    为了能更清楚地说明2种实现方法的区别,我们举例说明:
    比如,我们需要实现一个发送邮件的功能,需要用到一个名为OutMailer的外部组件,因为上述原因,我们决定用Adapter模式实现对OutMailer的透明调用。
    首先,我们把邮件发送的功能抽象成一个接口:

    IMailer.java
    interfaceIMailer {
        
    //发送邮件
        publicvoidsendMail();
    }


    然后定一个实现IMailer接口的MailerAdapter类。

    下面我们来看看MailerAdapter的实现方法。

    通过继承实现Adapter
    MailerAdapter.java
    classMailerAdapterextendsOutMailerimplementsIMailer {
        
    //发送邮件
        publicvoidsendMail() {
            
    //调用OutMailer.sendMail()方法实现邮件发送
            this.sendMail();
        }

        
    //这里省略其他方法
    }


    通过委让实现Adapter
    MailerAdapter.java
    classMailerAdapterimplementsIMailer {
        
    privateOutMailer outMailer=newOutMailer();
        
    //发送邮件
        publicvoidsendMail() {
            
    //调用OutMailer.sendMail()方法实现邮件发送
            outMailer.sendMail();
        }

        
    //这里省略其他方法
    }



    不管是通过继承实现Adapter,还是通过委让实现Adapter,调用方MailerClient的调用方法完全一样,如下:
    MailerClient.java
    IMailer mailer=newMailerAdapter();
    ...
    mailer.sendMail();

    我们可以看到,这里完全没有直接调用OutMailer,也就是说OutMailer即使被替换了,我们也不用对MailerClient做任何修改。

  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314551.html
Copyright © 2011-2022 走看看