• Adapter适配器模式


    Adapter模式(适配器模式)也被称为Wrapper模式(包装模式);个人理解就是,新的接口,采用旧的方法实现。

    适配器模式具有两种实现方式:

    1. 类适配器模式(使用继承旧方法的类,来实现新接口的调用);
    2. 对象适配器模式(使用委托的方法,将旧对象编程新接口实现类的一个属性,进行调用)。

    实例程序1:

    • Banner类,被适配的类,即旧方法实现类
    package site.wangxin520.gof.adapter.damo1;
    
    /**
     * 使用适配器模式,将输入的字符A显示为(A)或者*A*
     * 本类即被适配的类
     * @author wangXgnaw
     *
     */
    public class Banner {
    
        private String string;
        //构造函数传参数
        public Banner(String string){
            this.string=string;
        }
        /*
         * 被适配的方法一,展示(string)
         */
        public void showWithParen(){
            System.out.println("("+string+")");
        }
        /*
         * 被适配的方法二,展示*string*
         */
        public void showWithAster(){
            System.out.println("*"+string+"*");
        }
        
    }
    • Pring接口,目标接口
    package site.wangxin520.gof.adapter.damo1;
    
    /**
     * 需求的接口,继承此接口的代码,对Banner进行适配
     * @author wangXgnaw
     *
     */
    public interface Print {
        public void printWeak();
        public void printStrong();
    }
    • PringBanner类,实现了目标接口的适配器,用于适配旧方法
    package site.wangxin520.gof.adapter.damo1;
    
    /**
     * 适配器,将printWeak接口方法,转换成Banner类中show***方法
     * @author wangXgnaw
     * 方式一:采用继承原来Banner类的方法
     */
    public class PrintBanner extends Banner implements Print {
    
        /**
         * 构造函数,调用父类的构造函数
         * @param string
         */
        public PrintBanner(String string){
            super(string);
        }
        /**
         * 在新接口的实现下,调用原来的方法
         */
        public void printWeak() {
            this.showWithAster();
        }
        public void printStrong() {
            this.showWithParen();
        }
    
    }
    • 测试类
    package site.wangxin520.gof.adapter.damo1;
    
    /**
     * 适配器模式的测试类
     * @author wangXgnaw
     *
     */
    public class AdapterTest {
        
        public static void main(String[] args) {
            
            Print p=new PrintBanner("小帅哥");
            /*
             * 调用接口的方法
             */
            p.printStrong();
            p.printWeak();
            
        }
    }
    • 运行结果

    image

    实例程序2:

    • Banner类,被适配的类,即旧方法实现类 (没有变化)
    package site.wangxin520.gof.adapter.damo2;
    
    /**
     * 使用适配器模式,将输入的字符A显示为(A)或者*A*
     * 本类即被适配的类
     * @author wangXgnaw
     *
     */
    public class Banner {
    
        private String string;
        //构造函数传参数
        public Banner(String string){
            this.string=string;
        }
        /*
         * 被适配的方法一,展示(string)
         */
        public void showWithParen(){
            System.out.println("("+string+")");
        }
        /*
         * 被适配的方法二,展示*string*
         */
        public void showWithAster(){
            System.out.println("*"+string+"*");
        }
        
    }
    • Pring接口,目标接口 (没有变化)
    package site.wangxin520.gof.adapter.damo2;
    
    /**
     * 需求的接口,继承此接口的代码,对Banner进行适配
     * @author wangXgnaw
     *
     */
    public interface Print {
        public void printWeak();
        public void printStrong();
    }
    • PringBanner类,实现了目标接口的适配器,用于适配旧方法 ******(重点)
    package site.wangxin520.gof.adapter.damo2;
    
    /**
     * 适配器,将printWeak接口方法,转换成Banner类中show***方法
     * @author wangXgnaw
     * 方式二:使用对象属性的方法,而不像方式一那样继承
     */
    public class PrintBanner implements Print {
        
        private Banner banner;
        
        /**
         * 构造函数,调用父类的构造函数
         * @param string
         */
        public PrintBanner(String string){
            banner=new Banner(string);
        }
        /**
         * 在新接口的实现下,调用原来的方法
         */
        public void printWeak() {
            banner.showWithAster();
        }
        public void printStrong() {
            banner.showWithParen();
        }
    
    }
    • 测试类(没有变化)
    package site.wangxin520.gof.adapter.damo2;
    
    /**
     * 适配器模式的测试类
     * @author wangXgnaw
     *
     */
    public class AdapterTest {
        
        public static void main(String[] args) {
            
            Print p=new PrintBanner("小帅哥");
            /*
             * 调用接口的方法
             */
            p.printStrong();
            p.printWeak();
            
        }
    }
    • 运行结果

    image

    总结:

    Adapter模式会对现有的类进行适配,生成新的类。通过这种方式,可以很方便的创建出我们需要的方法群。使得代码变得简单可以适用于版本升级,接口的兼容性解决!

    注意的是:目标接口和被适配的对象之间,如果功能完全不同的话,是无法使用此模式的!

  • 相关阅读:
    js添加删除元素内容
    [H5]range对象的createRange方法
    [H5]range对象的clone方法
    [H5]range对象的setStart/setEnd方法
    [H5]range对象之selectNode等方法
    [H5]API之range对象
    上传本地Jar包到阿里云的云效私有仓库
    Alibaba Cloud Toolkit 一键部署插件使用入门
    关于mybatis 注意
    win10 docker 安装oracel11g
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7599419.html
Copyright © 2020-2023  润新知