23种设计模式-适配器模式(类适配器和对象适配器方式)

说到适配器模式最多的最经典的案例就是插座,其实说到插座就已经知道适配器模式干啥的了。
在这里插入图片描述

基本介绍:
1)适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协调工作。起别名为包装器(Wrapper)
2)适配器模式属于结构型模式
3)主要分为三类:类适配器模式,对象适配器模式,接口适配器模式

方式一:类适配器模式
在这里插入图片描述

//被适配器的类
public class Voltage220V {
    //输出电压220V
    public int outPut220V(){
        int src=220;
        System.out.println("电压="+src+"伏");
        return 220;
    }
}

//适配接口
public interface IVoltage5V {
   public int output5V();
}

//适配器类
public class VoltageAdapter extends Voltage220V implements IVoltage5V {
    @Override
    public int output5V() {
        int srcV=outPut220V();
        int dstV=srcV/44;
        return dstV;
    }
}

public class Phone {
    public void charging(IVoltage5V iVoltage5V){
        if(iVoltage5V.output5V()==5){
            System.out.println("电压为5V,可以充电。。。");
        }else if (iVoltage5V.output5V()>5){
            System.out.println("电压大于5V,不可以充电。。。");
        }
    }
}

public class Client {
    public static void main(String[] args) {
        Phone phone=new Phone();
        phone.charging(new VoltageAdapter());
    }
}

类适配器模式注意事项和细节
1)Java的单继承机制,所以类适配器需要继承Voltage220V(被适配者类)这一点算是一个缺点(继承就会增加耦合度,因为违背了组合服用原则)
2)Voltage220V(被适配者类)的方法在Adapter中都会暴露出来,也增加了使用的成本。(其实违背了迪米特原则,最少知道原则)
3)由于继承了Voltage220V(被适配者类),所以它可以根据需求重写被适配者类的方法,使得Adapter的灵活性增加了(其实这一点看似增强了灵活性,但是违背了里式替换原则,不要重写父类的方法)

借此模式再回顾一下设计模式的七大原则:
1.单一职责原则:5V电压,220V电压一个类一个电压,手机,适配器,没有互相不清的职责,所以符合。
2.接口隔离原则:本代码中只用了一个IVoltage5V类,并且没有多余实现的方法,所有也符合。
3.依赖倒转原则:尽量用接口和抽象,Phone类中方法用的是接口接的参数,而不是用的具体类,所以符合。
4.里式替换原则:不重写父类的方法。
5.开闭原则:对修改关闭,对扩展开放,再增加一个5V电压的同时没有动原来的220V功能的类,如果再增加110V也不会改变原来的类,只会增加适配的类,所以也符合
6.迪米特法则:这个就有一点影响了,因为用了继承之后,父类的方法全被发现,不是继承不能用,因为5V和220V是并列关系,也没有父子的感觉,这里用到者继承就有点没那么好了,所以违背不符合。
7.组合复用原则:尽量用依赖(参数传入220V对象)、聚合(用set方法或构造方法传入220V对象)、组合(在5V类里声明220属性并直接new对象赋值)

方式二:对象适配器模式
将继承改成用依赖(参数传入220V对象)、聚合(用set方法或构造方法传入220V对象)、组合(在5V类里声明220属性并直接new对象赋值)实现就是对象适配器模式,为了不增太多代码,这里省略,也很好理解。
思考:用了这个方式之后,好像七大原则都符合了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值