Adapter适配器模式

适配器模式

Adapter模式有以下两种:

类适配器模式继承适配器)

对象适配器模式(使用委托的适配器)

模型类比:

Adapter模式中的登场角色

电源的比喻 示例程序
实际情况(adaptee) 交流100伏特 Banner类
变换装置(adapter) 适配器 PrintBanner类
需求(target) 直流12伏特 Print接口

Target(对象)

该角色定义所需的方法。Print接口(使用继承时)和Print类(使用委托时)扮演此角色

Client(请求者)

该角色负责使用 Target角色所定义的方法进行具体处理,Main扮演此类角色

Adaptee(被适配)

Adaptee是一个持有既定方法的角色, 即100伏特电源. 由Banner类扮演此角色

Adapter(适配)

Adapter模式的主人公,使用Adaptee角色的方法来满足Target角色的需求。

类适配器模式

Adapter适配器模式_第1张图片

Banner.java

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+"*");
    }

}

Print.java

public interface Print {
    public abstract void printWeak();
    public abstract void printStrong();
}

PrintBanner.java

public class PrintBanner extends Banner implements Print  {

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


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

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

Main.java

public class Main {
    public static void main(String[] args) {
        Print p = new PrintBanner("hello");
        p.printWeak();
        p.printStrong();
    }
}

对象适配器模式

Adapter适配器模式_第2张图片

PrintBanner.java

public class PrintBanner extends Print {
    private Banner banner;

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


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

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

Print.java

public abstract class Print {
    public abstract void printWeak();
    public abstract void printStrong();
}

Adapter适配器模式_第3张图片

不是很理解新旧版本问题?

Adapter适配器模式_第4张图片

Adapter适配器模式_第5张图片

练习题:

Adapter适配器模式_第6张图片

Adapter适配器模式_第7张图片

设计思路:

Adapter适配器模式_第8张图片

你可能感兴趣的:(Adapter适配器模式)