Adapter适配器模式

来源:互联网 发布:淘宝大促时间表2017 编辑:程序博客网 时间:2024/06/03 19:46
  • 应用场景
    在程序世界里面,经常会有现有的程序无法直接使用,需要做适当的转换之后才可以使用的情况。而适配器模式就是这种填补差异的设计模式。

    Adapter同时也被称为Wrapper模式,Wrapper就有包装器的意思。使用精美的包装纸将商品包装成礼物。

  • 类适配器模式
    Banner类 具体实现了怎么转换 ,目的就是让字符串输出
    public class Banner {    private String string;    public Banner(String string)    {        this.string=string;    }    /**     * 显示带括号     */    public void showWithParen(){        System.out.println("( "+this.string+" )");    }    /**     *显示带星号     */    public void showWithAster(){        System.out.println("* "+this.string+" *");    }}

Print接口 一个打印的接口

public interface Print {   public abstract void printParen();   public abstract void printAster();}

PrintBanner类 真正实现了适配器功能的类

public class PrintBanner extends Banner implements Print {    public PrintBanner(String string) {        super(string);    }    @Override    public void printParen() {           showWithParen();         }    @Override    public void printAster() {           showWithAster();         }}

APP
main类并不知道 PrintBanner 类是如何实现这种输出的,这样就可以在不用对Main类进行修改的情况下通过改变 PrintBanner 的具体实现来改变程序的输出结果

public class Main {      public static void main(String[] args) {        Print print = new PrintBanner("你好");        print.printAster();        print.printParen();    }}
  • 对象适配器

Banner类跟上述类一样
下面是Print类 上文把这个声明为一个接口,这里把它写成一个抽象类

public abstract class Print {    public abstract void printParen();    public abstract void printAster();}

PrintBanner 继承了抽象类,并且创建了Banner的对象,调用了Banner的方法

public class PrintBanner extends Print {    private Banner banner;      @Override    public void printParen() {        banner.showWithParen();    }    @Override    public void printAster() {        banner.showWithAster();         }}

这个app与上文一样。

  • 什么时候使用Adapter
    很多时候我们写程序,并不是从零开始写,而是有一些很多 经过过反复测试的类提供给我们自己用。Adapter模式会对现有的类进行适配生成新的类。通过这种模式来创建适合我们自己项目的类,如果出现问题,我们就可以很明确的知道错误在哪!
0 0
原创粉丝点击