• java设计模式之适配器模式


    适配器模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。

    对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。

    适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。

    假如我们这里有一个旧的Api,可能是之前的团队开发的,现在的客户端需要的是基于Target的接口

    旧Api

    /**
     * 旧的不兼容的接口
     */
    public class Api {
        void fa() {
            System.out.println("I am Api.fa()");
        }
    }

    需要的基于Target的接口

    /**
     * 目标要求的接口
     */
    public interface Target {
        void f1();
    }

    旧API和新的客户端需求是不兼容的,这个时候我们就需要通过一个适配器来适配。

    首先我们基于继承的方式来实现适配器

    /**
     * 基于继承的适配器
     */
    public class ApiAdapter extends Api implements Target{
        @Override
        public void f1() {
            System.out.println("I am ApiAdapter.f1()");
            fa();
        }
    }
    
    /**
     * 基于组合的适配器
     */
    public class ApiAdapter2 implements Target{
        private Api api;
    
        public ApiAdapter2(Api api) {
            this.api = api;
        }
    
        @Override
        public void f1() {
            System.out.println("I am ApiAdapter2.f1()");
            api.fa();
        }
    }

    客户端调用

    public class Client {
        public static void main(String[] args) {
            ApiAdapter apiAdapter = new ApiAdapter();
            apiAdapter.f1();
    
            ApiAdapter2 apiAdapter2 = new ApiAdapter2(new Api());
            apiAdapter2.f1();
        }
    }

    输出

    I am ApiAdapter.f1()
    I am Api.fa()
    I am ApiAdapter2.f1()
    I am Api.fa()
  • 相关阅读:
    MySQL查询优化程序
    mysql主从:主键冲突问题
    Cacti 'graph_xport.php' SQL注入漏洞
    Nginx SPDY缓冲区溢出漏洞
    Zend Framework XML外部实体和安全绕过漏洞
    WordPress 3.8.1 /xmlrpc.php拒绝服务漏洞
    OpenSSH 'child_set_env()'函数安全绕过漏洞
    PHP "gdImageCreateFromXpm()"空指针间接引用漏洞
    Apache HTTP Server多个拒绝服务漏洞
    Samba 安全漏洞
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15859286.html
Copyright © 2020-2023  润新知