图解设计模式 Adapter 模式

Adapter(适配器模式)

适配器模式用于填补现有程序和所需程序之间的差异

Adapter模式有以下两种

  • 类适配器模式(使用继承的适配器)
  • 对象适配器模式(使用委托的适配器)
类适配器模式(使用继承的适配器)

《图解设计模式 Adapter 模式》

Paste_Image.png

Banner
//实际情况
public class Banner {

    private String string;
    public Banner(String string) {
        this.string = string;
    }

    public void showWithParen() {
        System.out.println("(" + string + ")");
    }

    public void showWithAster() {
        System.out.println("*" + string + "*");
    }


}
PrintBanner(适配器)
public class PrintBanner extends Banner implements Print {

    public PrintBanner(String string) {
        super(string);

    }

    @Override
    public void printWeak() {
        showWithParen();
    }

    @Override
    public void printStrong() {
        showWithAster();
    }
}
Print(需求)
public interface Print {
    public abstract void printWeak();
    public abstract void printStrong();
}
对象适配器(使用委托的适配器)

《图解设计模式 Adapter 模式》

Paste_Image.png

Banner

public class Banner {

    private String string;
    public Banner(String string) {
        this.string = string;
    }

    public void showWithParen() {
        System.out.println("(" + string + ")");
    }

    public void showWithAster() {
        System.out.println("*" + string + "*");
    }
}

PrintBanner(适配器)

//满足Target的需求
public class PrintBanner extends Print {

    private Banner banner;

    public PrintBanner(String string) {
        //super(string);
        this.banner = new Banner(string);

    }

    @Override
    public void printWeak() {
        banner.showWithParen();
    }

    @Override
    public void printStrong() {
        banner.showWithAster();
    }
}

Print(需求,Target(对象))

//负责定义所需的方法
public abstract class Print {
    public abstract void printWeak();
    public abstract void printStrong();
}

Main

//Main中不需要知道任何关于Banner的信息
public static void main(String[] args) {
    // write your code here
        Print p = new PrintBanner("Hello");
        p.printWeak();
        p.printStrong();
    }
}

什么时候使用Adapter模式

很多时候,我们并非从零开始编程,经常会用到现有的类,特别是当现有的类已经被充分测试过,我们更愿意将这些类作为组件复用,Adapter模式会对现有的类进行适配,生成新的类
使用Adapter可以在完全不改变现有代码的前提下使现有代码适配于新的接口

    原文作者:算法小白
    原文地址: https://juejin.im/entry/587602291b69e6005cf28ee4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞