设计模式

适配器模式(Adapter)

2020-07-18  本文已影响0人  秀儿2020

定义

将一个类的接口转换成客户希望的另一个类的接口使得原本由于接口不兼容而不能一起工作的类可以一起工作。

本质

转换匹配,复用功能。

登场角色

适配器模式根据实现方式不同,可分为类适配器模式和对象适配器模式两种方式,在类适配器模式中,通过继承的方式实现,在对象适配器模式中,通过持有旧的被适配器的对象即“委托”的方式来实现。

示例代码(类适配器模式)

/**
 * 需要被适配的类,持有旧的方法
 */
public class Banner {
    private String message;
    public Banner(String message){
        this.message = message;
    }
    public void showWithParen(){
        System.out.println("(" + message + ")");
    }
    public void showWithAster(){
        System.out.println("*" + message + "*");
    }
}


/**
 * 需要适配后的新的调用方式
 */
public interface Print {
    void printWeak();
    void printStrong();
}


/**
 * 适配器角色,适配旧方法的具体实现方式
 */
public class PrintBanner extends Banner implements Print{

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

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

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


/**
 * 新接口的使用者
 */
public class Main {
    public static void main(String args[]){
        PrintBanner printBanner = new PrintBanner("这是类适配器模式");
        printBanner.printWeak();
        printBanner.printStrong();
    }
}



运行结果

(这是类适配器模式)
*这是类适配器模式*

示例代码(对象适配器模式)

/**
 * 新的接口调用方式
 */
public abstract class Print {
    public abstract void printWeak();
    public abstract void printStrong();
}


/*
适配旧方法的具体的实现方式
 */
public class PrintBanner extends Print{
    private Banner banner;
    PrintBanner(Banner banner){
        this.banner = banner;
    }
    @Override
    public void printWeak() {
        banner.showWithParen();
    }

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


/**
 * 新方法的使用者
 */
public class Main {
    public static void main(String args[]){
        PrintBanner printBanner = new PrintBanner(new Banner("这是对象适配器"));
        printBanner.printWeak();
        printBanner.printStrong();
    }
}

运行结果

(这是对象适配器)
*这是对象适配器*

功能

进行转换匹配,目的是复用已有的功能,而不是来实现新的接口,也就是说客户端需要的功能是已经实现了的,需要适配器模式将不兼容的接口转换成客户端需要的样子。

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读