Adapter(适配器)模式

本文通过两种实现方式详细解析了适配器模式:类继承的适配器与对象委托的适配器。提供了完整的代码示例,展示了如何将Banner类适配为Print接口,以便在不同的上下文中使用。

1、类继承的适配器

1.1、类图

输入图片说明

1.2、代码示例

Print接口,即上面类图中的Target

package me.jtzen9.adapter;

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

Banner类,即类图中的Adaptee

package me.jtzen9.adapter;

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类,即类图中Adapter

package me.jtzen9.adapter;

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

Client类,请求者

package me.jtzen9.adapter;

public class Client {
    public static void main(String[] args) {
        Print print = new PrintBanner("Hello");
        print.printWeak();
        print.printStrong();
    }
}

2、对象委托的适配器

2.1、类图

输入图片说明

2.2、代码示例

Print2抽象类,即上面类图中的Target

package me.jtzen9.adapter;

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

PrintBanner2类,即类图中Adapter

package me.jtzen9.adapter;

public class PrintBanner2 extends Print2{
    private Banner banner;
    public PrintBanner2(String string) {
        this.banner = new Banner(string);
    }
    @Override
    public void printWeak() {
        banner.showWithParen();
    }
    @Override
    public void printStrong() {
        banner.showWithAster();
    }
}

其中,Client类与Banner类(类图中Adaptee)不变。

3、说明

摘至:【日】结城浩/著,杨文轩/译 .《图解设计模式》 北京:人民邮电出版社. 2017. 13~22

转载于:https://my.oschina.net/jtzen9/blog/909195

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值