zoukankan      html  css  js  c++  java
  • 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模式会对现有的类进行适配,生成新的类。通过这种方式,可以很方便的创建出我们需要的方法群。使得代码变得简单可以适用于版本升级,接口的兼容性解决!

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

  • 相关阅读:
    SharePoint 2010 访问WebService 增删改列表
    TFS 项目删除
    一个或多个域类型未正确安装。请转到列表设置页删除这些域。
    IIS 应用程序池 已停用
    hadoop进程全部启动成功, LiveNode也正常,但界面显示 DataNode不一致
    Jenkins 打包发布java应用程序
    centos安装JDK与Tomcat
    JAVA XStream的使用
    MongoDB副本集的实现与维护实战
    基于.NET平台常用的框架整理(转)
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7599419.html
Copyright © 2011-2022 走看看