设计模式之适配器设计模式

适配器设计模式

适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口,主要的目的是兼容性,让原本因接口不能匹配一起工作的两个类可以协同工作。
过程:通过适配器将原角色API进行适配为目标角色的API

类适配器模式

通过集成来实现适配功能的。

实现例子:

需求:220v电压通过适配器转换为5v电压
适配器继承于源角色并实现目标角色
通过调用父类中的方法,来实现最终的需求
AdepterTest01 适配器类

public class AdepterTest01 extends AC220V implements DC5V{
    @Override
    public int dc5V() {
        return (super.outPut()/44);
    }

    public static void main(String[] args) {
        AdepterTest01 adepterTest01=new AdepterTest01();
        int result=adepterTest01.dc5V();
        System.out.println(result);
    }
}

AC220V 源角色

public class AC220V {
    public int outPut(){
        return 220;
    }
}

DC5V 目标角色

public interface DC5V {
    public int dc5V();
}

对象适配器模式

实现例子:

通过组合来实现适配器功能的(适配器拥有源角色的实例)

public class AdapterTest02 implements DC5V {
    private AC220V ac220V;
    public AdapterTest02(AC220V ac220V) {
        this.ac220V = ac220V;
    }
    @Override
    public int dc5V() {
        return (ac220V.outPut())/44;
    }
    public static void main(String[] args) {
        AdapterTest02 adapterTest02=new AdapterTest02(new AC220V());
        System.out.println(adapterTest02.dc5V());
    }
}

接口适配器模式

需求:不论多少伏电压通过适配器都转换为5v电压
过程:定义一个抽象的电源,并且提供多个适配器角色的有参构造,通过具体源角色的实例使用抽象的电源引用,适配器类实现于目标角色并实现目标角色的方法,在方法体中,我们进行逻辑处理,将输入的电压进行适配器5V电压,从而达到万能适配的效果。

public abstract class ACV {
    public  int output(){
        return 1;
    }
}
class AC220V extends ACV{
    @Override
    public int output() {
        return 220;
    }
}
class AC110V extends ACV{
    @Override
    public int output() {
        return 110;
    }
}
public class AdapterTest03 extends ACV{
    private  ACV acv;
    public AdapterTest03(AC220V ac220V) {
        this.acv=ac220V;
    }
    public AdapterTest03(AC110V ac110V) {
        this.acv = ac110V;
    }
    public int dc5V(){
        int ac=0;
        if(acv!=null){
            ac=acv.output();
        }
        int sta=ac/5;
        return (ac/sta);
    }
    public static void main(String[] args) {
        AdapterTest03 adapter220=new AdapterTest03(new AC220V());
        AdapterTest03 adapter110=new AdapterTest03(new AC110V());
        System.out.println(adapter220.dc5V());
        System.out.println(adapter110.dc5V());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值