码迷,mamicode.com
首页 > 其他好文 > 详细

Adapter适配器模式

时间:2017-09-26 23:30:23      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:类的构造函数   wrapper   system   类适配器   代码   一个   ast   类适配器模式   print   

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();
        
    }
}
  • 运行结果

技术分享

实例程序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();
        
    }
}
  • 运行结果

技术分享

 

总结:

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

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

Adapter适配器模式

标签:类的构造函数   wrapper   system   类适配器   代码   一个   ast   类适配器模式   print   

原文地址:http://www.cnblogs.com/wangxinblog/p/7599419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!