zoukankan      html  css  js  c++  java
  • 设计模式课程 设计模式精讲 12-2 适配器模式coding

    1    重要

    1.1  类适配器和对象适配器最大的区别

    2    代码演练

    2.1  代码演练1(类适配器模式)

    2.2  代码演练2(对象适配模式)

    2.3  代码演练3(具体应用场景)

    1    重要
    1.1  类适配器和对象适配器最大的区别

    类适配器通过继承关系达到适配的目的,而对象适配器通过组合达到适配目的。

    2    代码演练
    2.1  代码演练1(类适配器模式)

    需求相关:

    a类和b类,想用b类或者b类的子类实现a类的方法

    设计分析:

    适配器类c继承了被适配器类a并且实现了目标类b的接口,通过适配器类c把被适配者a的方法适配给了目标类b;

    适配器类c是被适配者a的子类,通过调用父类的方法实现了目标类b

    UML类图:

     

    测试类:

    package com.geely.design.pattern.structural.adapter.classadapter;
    
    public class Test {
        public static void main(String [] args){
            //打印目标类的方法
            Target target = new ConcreteTarget();
            target.request();
    
    
            //打印适配器的方法
            Adapter adapter = new Adapter();
            adapter.request();
    
        }
    }

    适配器类Adapter:

    package com.geely.design.pattern.structural.adapter.classadapter;
    
    public class Adapter extends Adaptee implements Target {
        @Override
        public void request() {
            super.adapteeRequest();
        }
    }

    目标接口Target:

    package com.geely.design.pattern.structural.adapter.classadapter;
    
    /**
     * 目标接口
     */
    public interface Target {
        void request();
    }

    目标实现类ConCreteTarget:

    package com.geely.design.pattern.structural.adapter.classadapter;
    
    /**
     * 目标实现类
     */
    public class ConcreteTarget implements Target {
        @Override
        public void request() {
            System.out.println("目标实现类自己的方法,,,");
        }
    }

    被适配者类Adaptee:

    package com.geely.design.pattern.structural.adapter.classadapter;
    
    /**
     * 该类是被适配者,想实现目标类的方法
     */
    public class Adaptee {
        public void adapteeRequest(){
            System.out.println("被适配器执行它自己的方法。。。");
        }
    }

    打印日志:

    "C:Program FilesJavajdk1.7.0_79injava.exe" "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=33436:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.7.0_79jrelibcharsets.jar;C:Program FilesJavajdk1.7.0_79jrelibdeploy.jar;C:Program FilesJavajdk1.7.0_79jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.7.0_79jrelibextdnsns.jar;C:Program FilesJavajdk1.7.0_79jrelibextjaccess.jar;C:Program FilesJavajdk1.7.0_79jrelibextlocaledata.jar;C:Program FilesJavajdk1.7.0_79jrelibextsunec.jar;C:Program FilesJavajdk1.7.0_79jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.7.0_79jrelibextsunmscapi.jar;C:Program FilesJavajdk1.7.0_79jrelibextzipfs.jar;C:Program FilesJavajdk1.7.0_79jrelibjavaws.jar;C:Program FilesJavajdk1.7.0_79jrelibjce.jar;C:Program FilesJavajdk1.7.0_79jrelibjfr.jar;C:Program FilesJavajdk1.7.0_79jrelibjfxrt.jar;C:Program FilesJavajdk1.7.0_79jrelibjsse.jar;C:Program FilesJavajdk1.7.0_79jrelibmanagement-agent.jar;C:Program FilesJavajdk1.7.0_79jrelibplugin.jar;C:Program FilesJavajdk1.7.0_79jrelib
    esources.jar;C:Program FilesJavajdk1.7.0_79jrelib
    t.jar;F:xiangmu3XinIdeadesign_pattern	argetclasses;F:xiangmu3XinIdeadesign_Maven_Homeliborgapache	omcat	omcat-servlet-api7.0.64	omcat-servlet-api-7.0.64.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-webmvc4.0.3.RELEASEspring-webmvc-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-beans4.0.3.RELEASEspring-beans-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-context4.0.3.RELEASEspring-context-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-aop4.0.3.RELEASEspring-aop-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homelibaopallianceaopalliance1.0aopalliance-1.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-core4.0.3.RELEASEspring-core-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-expression4.0.3.RELEASEspring-expression-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-web4.0.3.RELEASEspring-web-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-oxm4.0.3.RELEASEspring-oxm-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-jdbc4.0.3.RELEASEspring-jdbc-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-tx4.0.3.RELEASEspring-tx-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworkspring-test4.0.3.RELEASEspring-test-4.0.3.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgaspectjaspectjweaver1.7.3aspectjweaver-1.7.3.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgmybatismybatis-spring1.3.0mybatis-spring-1.3.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgmybatismybatis3.4.1mybatis-3.4.1.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgaspectjaspectjrt1.6.11aspectjrt-1.6.11.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgcodehausjacksonjackson-mapper-asl1.9.12jackson-mapper-asl-1.9.12.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgcodehausjacksonjackson-core-asl1.9.12jackson-core-asl-1.9.12.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-dbcpcommons-dbcp1.4commons-dbcp-1.4.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-poolcommons-pool1.5.4commons-pool-1.5.4.jar;F:xiangmu3XinIdeadesign_Maven_Homelibchqoslogbacklogback-classic1.1.2logback-classic-1.1.2.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgslf4jslf4j-api1.7.6slf4j-api-1.7.6.jar;F:xiangmu3XinIdeadesign_Maven_Homelibchqoslogbacklogback-core1.1.2logback-core-1.1.2.jar;F:xiangmu3XinIdeadesign_Maven_Homelibmysqlmysql-connector-java5.1.6mysql-connector-java-5.1.6.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgoogleguavaguava20.0guava-20.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgapachecommonscommons-lang33.5commons-lang3-3.5.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-collectionscommons-collections3.2.1commons-collections-3.2.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibjunitjunit4.12junit-4.12.jar;F:xiangmu3XinIdeadesign_Maven_Homelibjoda-timejoda-time2.3joda-time-2.3.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborghashidshashids1.0.1hashids-1.0.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-netcommons-net3.1commons-net-3.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-fileuploadcommons-fileupload1.2.2commons-fileupload-1.2.2.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-iocommons-io2.0.1commons-io-2.0.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgithubpagehelperpagehelper4.1.0pagehelper-4.1.0.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgithubmiemiedevmybatis-paginator1.2.17mybatis-paginator-1.2.17.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgithubjsqlparserjsqlparser.9.4jsqlparser-0.9.4.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-codeccommons-codec1.10commons-codec-1.10.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-configurationcommons-configuration1.10commons-configuration-1.10.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-langcommons-lang2.6commons-lang-2.6.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcommons-loggingcommons-logging1.1.1commons-logging-1.1.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgooglezxingcore2.1core-2.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomgooglecodegsongson2.3.1gson-2.3.1.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborghamcresthamcrest-core1.3hamcrest-core-1.3.jar;F:xiangmu3XinIdeadesign_Maven_Homelib
    edisclientsjedis2.6.0jedis-2.6.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgapachecommonscommons-pool22.0commons-pool2-2.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgprojectlomboklombok1.16.18lombok-1.16.18.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgspringframeworksessionspring-session-data-redis1.2.5.RELEASEspring-session-data-redis-1.2.5.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborg
    edisson
    edisson2.9.0
    edisson-2.9.0.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-common4.1.8.Final
    etty-common-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-codec4.1.8.Final
    etty-codec-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-buffer4.1.8.Final
    etty-buffer-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-transport4.1.8.Final
    etty-transport-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-resolver4.1.8.Final
    etty-resolver-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibio
    etty
    etty-handler4.1.8.Final
    etty-handler-4.1.8.Final.jar;F:xiangmu3XinIdeadesign_Maven_Homelibjavaxcachecache-api1.0.0cache-api-1.0.0.jar;F:xiangmu3XinIdeadesign_Maven_Homelibioprojectreactor
    eactor-stream2.0.8.RELEASE
    eactor-stream-2.0.8.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homelibioprojectreactor
    eactor-core2.0.8.RELEASE
    eactor-core-2.0.8.RELEASE.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborg
    eactivestreams
    eactive-streams1.0.0
    eactive-streams-1.0.0.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomfasterxmljacksondataformatjackson-dataformat-yaml2.6.7jackson-dataformat-yaml-2.6.7.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgyamlsnakeyaml1.15snakeyaml-1.15.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomfasterxmljacksoncorejackson-core2.6.7jackson-core-2.6.7.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomfasterxmljacksoncorejackson-databind2.6.7jackson-databind-2.6.7.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomfasterxmljacksondataformatjackson-dataformat-avro2.9.0jackson-dataformat-avro-2.9.0.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomfasterxmljacksoncorejackson-annotations2.9.0jackson-annotations-2.9.0.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgapacheavroavro1.8.1avro-1.8.1.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcom	houghtworksparanamerparanamer2.7paranamer-2.7.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgxerialsnappysnappy-java1.1.1.3snappy-java-1.1.1.3.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborgapachecommonscommons-compress1.8.1commons-compress-1.8.1.jar;F:xiangmu3XinIdeadesign_Maven_Homeliborg	ukaanixz1.5xz-1.5.jar;F:xiangmu3XinIdeadesign_Maven_Homelibcomsunfacesjsf-api1.2jsf-api-1.2.jar" com.geely.design.pattern.structural.adapter.classadapter.Test
    目标实现类自己的方法,,,
    被适配器执行它自己的方法。。。
    
    Process finished with exit code 0
    2.2  代码演练2(对象适配模式)

    需求:a类和b类,想用b类或者b类的子类实现a类的方法

    设计分析:

    通过组合达到目的

    关联关系:

    只有 适配类发生了变化,其他类都不变。

    UML类图:

     

    适配器类:

    package com.geely.design.pattern.structural.apapter.objectadapter;
    
    public class Adapter implements Target {
        Adaptee adaptee = new Adaptee();
    
        @Override
        public void request() {
            adaptee.adapteeRequest();
        }
    }

    测试类:

    package com.geely.design.pattern.structural.apapter.objectadapter;
    
    public class Test {
        public static void main(String [] args){
            //打印目标类的方法
            Target target = new ConcreteTarget();
            target.request();
    
    
            //打印适配器的方法
            Adapter adapter = new Adapter();
            adapter.request();
    
        }
    }

    目标接口:

    package com.geely.design.pattern.structural.apapter.objectadapter;
    
    /**
     * 目标接口
     */
    public interface Target {
        void request();
    }

    目标实现类:

    package com.geely.design.pattern.structural.apapter.objectadapter;
    
    /**
     * 目标实现类
     */
    public class ConcreteTarget implements Target {
        @Override
        public void request() {
            System.out.println("目标实现类自己的方法,,,");
        }
    }

    被适配类:

    package com.geely.design.pattern.structural.apapter.objectadapter;
    
    /**
     * 该类是被适配者,想实现目标类的方法
     */
    public class Adaptee {
        public void adapteeRequest(){
            System.out.println("被适配器执行它自己的方法。。。");
        }
    }

    打印日志:

    目标实现类自己的方法,,,
    被适配器执行它自己的方法。。。
    
    Process finished with exit code 0
    2.3  代码演练3(具体应用场景)

    需求:

    手机电源适配器,把220V交流电转化为5V直流电

    测试类:

    package com.geely.design.pattern.structural.adapter;
    
    public class Test {
        public static void main(String [] args){
            DC5V dc5V = new PowerAdapter();
            dc5V.outPutDC5V();
        }
    }

    电源适配器类:

    package com.geely.design.pattern.structural.adapter;
    
    import com.geely.design.pattern.structural.adapter.AC220V;
    import com.geely.design.pattern.structural.adapter.DC5V;
    
    /**
     * 电源适配器
     */
    public class PowerAdapter implements DC5V {
    
        //通过组合引入交流电220V
        AC220V ac220V = new AC220V();
    
        @Override
        public int outPutDC5V() {
            int adapterInput = ac220V.outputAC220V();
    
            //变压器转换
            int adapterOutput = adapterInput/44;
    
            System.out.println("使用电源适配器,最终转换为直流电"+adapterOutput+"V");
            return adapterOutput;
        }
    }

    目标类直流电5V类:

    package com.geely.design.pattern.structural.adapter;
    
    public interface DC5V {
        //输出5V直流电
        int outPutDC5V();
    }

    被适配器交流电220V类:

    package com.geely.design.pattern.structural.adapter;
    
    public class AC220V {
        public int outputAC220V(){
            int outputELE = 220;
            System.out.println("输出交流电"+outputELE+"V");
            return outputELE;
        }
    }

    打印日志:

    输出交流电220V
    使用电源适配器,最终转换为直流电5V
    
    Process finished with exit code 0
  • 相关阅读:
    IIS:日志代码分析
    SQL:查找被锁的表,以及锁表的SQL语句(重点推荐)
    SQL 2000/2005/2008 收缩日志方法
    SQL SERVER:使用工具观察与分析数据库中锁信息
    C# : Post 接收或发送XML
    WCF:没有终结点在侦听可以接受消息的*这通常是由于不正确的地址或者 SOAP操作导致的。
    SQL2005 遍历表插入
    SQL2005:SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法
    C#:安装Windows服务,动态指定服务名及描述
    IE6与 javascript:void(0)
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/11495259.html
Copyright © 2011-2022 走看看