适配器模式---代码实现,类图,电流转换实例-----Nothing

适配器模式

定义:

将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

类型:

结构型。

适用场景:

已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)

不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情况下的解决方案。

优点:

能提高类的透明性和复用,现有的类复用但不需要改变

目标类和适配器类解耦,提高程序扩展性。

符合开闭原则。

缺点:

适配器编写过程需要全面考虑可能会增加系统的复杂性。

增加了系统代码可读的难度。

扩展

对象适配器:符合组合复用原则,使用委托机制

类适配器:通过类继承

适配器模式VS外观模式

都是对现有的类和系统的封装

外观定义了新的接口在现有系统中提供了方便的入口,适配器复用原有的接口,使两个已有的接口协同工作。外观的粒度更大。

代码:
//类适配器
//接口
public interface Target {
    void request();
}
//接口实现类1
public class ConcreteTarget implements Target{
    @Override
    public void request() {
        System.out.println("具体的Target");
    }
}
//被适配者
public class Adaptee {
    public void AdapteeRequest(){
        System.out.println("被适配者的方法");
    }
}
//适配器实现类
public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        super.AdapteeRequest();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        Target target=new ConcreteTarget();
        target.request();
        Target adapterTarget=new Adapter();
        adapterTarget.request();
    }
}

//对象适配器,只有适配器实现类改变了,所以只把适配器实现类抛出来
public class Adapter implements Target {
    //这里不一样,可以对比一下。
    private Adaptee adaptee=new Adaptee();
    @Override
    public void request() {
        adaptee.AdapteeRequest();
    }
}


//220V交流电转5V直流电示例
public class AC220 {
    public int outputAC220V(){
        int output=220;
        System.out.println("220交流电");
        return output;
    }
}
//适配器接口
public interface DC5 {
    public int outputDC5();
}
//实现类
public class Adapter implements DC5 {
    private AC220 ac220 = new AC220();

    public int outputDC5() {
        int adapterInput=ac220.outputAC220V();
        //变压器
        int adapterOutput = adapterInput/44;
        System.out.println("转换为" + adapterOutput+"直流电");
        return adapterOutput;
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        DC5 dc5=new Adapter();
        dc5.outputDC5();
    }
}

类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bmJw5lKv-1606560583915)(G:\研究生课程\第一学期\高级软件设计\photo\09 适配器模式\image-20201128184609433.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiWjouGp-1606560583926)(G:\研究生课程\第一学期\高级软件设计\photo\09 适配器模式\image-20201128184530228.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0UwvgzN9-1606560583931)(G:\研究生课程\第一学期\高级软件设计\photo\09 适配器模式\image-20201128184458041.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值