zoukankan      html  css  js  c++  java
  • 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中要实现一个接口,就要实现所有的抽象方法。但是有时候只想实现一部分方法,就可以使用一个抽象类来实现这个接口,然后提供“空实现”,这样我们只要继承这个类,重写需要的方法即可!

      实际案例

      

        

  • 相关阅读:
    nextcloud环境搭建及部署
    docker容器内访问宿主机,访问不通 错误:Host is unreachable
    记录一下SQL的行行比较
    记录一次nginx平滑升级
    letsencrypt免费SSL证书自动续期
    守护进程因echo挂掉的原因,以及重定向标准输入、标准输出和标准错误
    openresty lua-nginx-module模块中文文档
    nginx localhost的坑
    PHP7 MongoDb的操作类
    tomcat 性能检测
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7747526.html
Copyright © 2011-2022 走看看