• Java设计模式(7)——结构型模式之适配器模式(Adapter)


    一、概述

      概念

      

      其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB;这里的转接头一方面需要查在typeC上,一方面需要作为USB插口。

      如果要举个Java中的例子的话,不妨看看JDBC的章节介绍!下图为JDBC简略UML图(中间的xxx JDBC就是我们适配JDBC与各大数据库厂商的适配器了!)

      

      简略图

      

       类的适配器模式

      

       

       对象的适配器模式(注意看类的关系,上面是继承,下面是委派)

      

      

     二、实践

      上面提到的转接头的例子,我们参考http://www.cnblogs.com/V1haoge/p/6479118.html

      当然,此例和上述转接头的例子本质是一样的(只是根据功能把接口分开的写法),上例中实际调用的都是已有的接口,通过适配的形式来调用,我们实际使用时应当灵活运用!

      类的适配,我们分别写出简略图中的角色即可

      目标角色

    /**
     * 目标接口
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public interface Target {
        /**
         * 目标操作1
         */
        void operation1();
        /**
         * 目标操作2
         */
        void operation2();
    }

      源角色

    /**
     * 源角色
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public class Adaptee {
        public void operation1(){
            System.out.println("adaptee#opetion1()");
        }
    }

      适配器

    /**
     * 适配器角色
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public class Adapter extends Adaptee implements Target{
        @Override
        public void operation2() {
            System.out.println("adapter#operation2()");
        }
    }

      客户端使用

    public class Client {
        public static void main(String[] args) {
            Target t = new Adapter();
            t.operation2();
        }
    }

      对象的适配器我们看核心的适配器角色

      适配器

    /**
     * 适配器角色
     * 作者: Administrator
     * 日期: 2017/10/28
     **/
    public class Adapter implements Target{
        private Adaptee adaptee;
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
        @Override
        public void operation1() {
            adaptee.operation1();
        }
    
        @Override
        public void operation2() {
            System.out.println("adapter#operation2()");
        }
    }

     三、改进与思考

      缺省的适配器模式

      在JAVA中要实现一个接口,就要实现所有的抽象方法。但是有时候只想实现一部分方法,就可以使用一个抽象类来实现这个接口,然后提供“空实现”,这样我们只要继承这个类,重写需要的方法即可!

      实际案例

      

        

  • 相关阅读:
    python中将集合进行切割的方法
    Tomcat单库多实例部署
    (二) storm的基本使用
    工作流表结构解析
    [TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)
    [HEOI 2013 day2] 钙铁锌硒维生素 (线性代数,二分图匹配)
    [HEOI 2013 day2] SAO (树形动态规划)
    关于react和Angular的思考
    angular 中的modal
    从易到难,写一个JavaScript加载器之一
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7747526.html
Copyright © 2020-2023  润新知