每天一个设计模式之适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能,将另一个不兼容的接口转化为可接收的接口,是一种行为型模式。

一、UML类图

形象比喻

在这里插入图片描述

UML类图

在这里插入图片描述
本文以220v电压转为5v给手机充电为例介绍适配器模式。Target相当于5V电压,Adapter就是电源适配器,Adaptee是需要被适配的220V电压。

二、代码示例

// 220v电源,被适配类
public class Voltage220V {
    public int output220V() {
        System.out.println("原始电压220v");
        return 220;
    }
}

下面是适配器类

public class ChargeAdapter extends AbsVoltage {
    private Voltage220V voltage220V;

    public ChargeAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    public int output5V() {
        int srcV = voltage220V.output220V();
        int dstV = srcV / 44;   // 减压
        return dstV;
    }

}

要想适配器工作,需要让其持有一个220V的电源,以及实现一个220->5的接口方法,代码如下。

public interface IVoltage {
    int output5V();
    int output10V();
}

// 其实只用一个IVoltage接口就可以了,这里加一层抽象类,提供一些默认的实现
public class AbsVoltage implements IVoltage {

    public int output5V() {
        return 0;
    }

    public int output10V() {
        return 0;
    }
}

手机类和客户类如下

public class Phone {
    void charge(IVoltage voltage) {
        // 手机的充电方法调用5V充电器的放电方法
        if (voltage.output5V() == 5) {
            System.out.println("电压为5V,可以正常充电");
        } else if (voltage.output5V() > 5) {
            System.out.println("电压高于5V,不能充电");
        }
    }
}

public class Client {
    public static void main(String[] args) {
        ChargeAdapter adapter = new ChargeAdapter(new Voltage220V());
        Phone phone = new Phone();
        // 手头没有5V的电源,只有220V的电源和一个电源适配器ChargeAdapter
        phone.charge(adapter);
    }
}

运行结果,

原始电压220v
电压为5V,可以正常充电

Process finished with exit code 0

三、参考

  1. https://www.runoob.com/design-pattern/adapter-pattern.html
  2. https://www.youtube.com/watch?v=1xWjqXj2gl0

设计模式系列博文导航

一、创建型 - 5种

原型模式(Prototype Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
工厂模式(Factory Pattern)
单例模式(Singleton Pattern)

助记语:原抽建工单

二、结构型 - 8种

享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
适配器模式(Adapter Pattern)
外观模式(Facade Pattern)

过滤器模式(Filter/Criteria Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)

助记语:想呆室外,过桥组装

三、行为型 - 11种

责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
中介者模式(Mediator Pattern)
迭代器模式(Iterator Pattern)

观察者模式(Observer Pattern)
策略模式(Strategy Pattern)
状态模式(State Pattern)

备忘录模式(Memento Pattern)
模板方法模式(Template Pattern)
访问者模式(Visitor Pattern)

助记语:责令解中谍,观测状被模仿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值