【Java开发】设计模式 05:适配器模式

1 适配器模式介绍

适配器模式(Adapter Pattern)属于结构型模式(结构型模式关注如何将现有的类或对象组织在一起形成更加强大的结构。)。

将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作

📌 场景

  • 当需要使用一个现存的类,但它提供的接口与我们系统的接口不兼容,而我们还不能修改它时;

  • 当多个团队独立开发系统的各功能模块,然后组合在一起,但由于某些原因事先不能确定接口时。

📌 适配器模式中出现的角色

在适配器模式中,主要存在四个角色

  • Target—NetToUsb(目标)目标定义了请求者所要使用的功能,是一种标准,具体实现可交由不同的适配器采用不同的方法进行实现;

  • Adapter—(适配器):负责实现转换功能的对象,同时其功能的实现需要符合目标中定义的标准;

  • Adaptee—NetLine(被适配的对象):需要被适配器转换的对象;

  • Client—Computer(请求者):即需要使用适配器的对象,本文是直接调用NetToUsb,由适配器来具体实现,而不用关心适配的具体过程。

适配器模式分为类适配器和对象适配器。

2 类适配器

📌 UML图

📌1.定义电脑

/**
 * 电脑
 * <p>想上网,需要插网线
 */
public class Computer{

    /**
     * 电脑需要连接上转换器才可以上网
     */
    public void connect(NetToUsb adapter){
        // 上网的具体实现,找一个转接头
        adapter.connectNetLine();
    }
}

📌2.定义usb转网口转接器

/**
 * 转接器
 */
public interface NetToUsb {

    /**
     * 处理请求,usb -> 网线
     */
    void connectNetLine();

}

📌3.定义网线

/**
 * 网线
 */
public class NetLine {

    /**
     * 上网
     */
    public void online(){
        System.out.println("连接网线上网");
    }
}

📌4.定义类适配器

/**
 * 类适配器
 */
public class ClassAdapter extends NetLine implements NetToUsb{

    @Override
    public void connectNetLine() {
        // 可以上网了
        super.online();
    }
}

📌5.使用

// 电脑
Computer computer = new Computer();
// 转接器已经插上网线
ClassAdapter adapter = new ClassAdapter();
// 电脑连接转接器,成功上网
computer.connect(adapter);

这种实现方式的适配器需要占用一个继承位。如果此时 NetToUsb 不是接口而是抽象类的话,由于 Java 不支持多继承,就无法实现了。同时根据合成复用原则,应该更多的通过合成的方式去实现功能。

3 对象适配器

这是更为常用的一种模式。

📌 UML图

前三步照旧~

📌5.定义对象适配器

public class ObjectAdapter implements NetToUsb{

    //网线
    private NetLine netLine;

    public ObjectAdapter(NetLine netLine){
        this.netLine = netLine;
    }

    @Override
    public void connectNetLine() {
        // 可以上网了
        netLine.online();
    }
}

📌5.使用

// 电脑
Computer computer = new Computer();
// 网线
NetLine netLine = new NetLine();
// 转接器插上网线
ObjectAdapter adapter = new ObjectAdapter(netLine);
// 电脑连接转接器,成功上网
computer.connect(adapter);

这样的方式不会占用继承位,且满足合成复用原则,耦合度更低,也更加灵活,推荐使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值