设计模式之适配者模式

本文深入探讨对象适配器模式的应用场景,通过家用电源与USB设备的适配案例,阐述如何将不同接口进行无缝衔接,提升系统组件之间的兼容性和灵活性。详细解析了适配器模式的实现步骤,包括插座、变压器和USB设备的角色分工,以及如何通过适配器实现电压转换,确保不同设备能够协同工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的                 那些类可以在一起工作。

模式分类:a.类的适配器模式(采用继承实现)

                    b.对象适配器(采用对象组合方式实现)

模式要素:(这里拿变压器来举例说明,便于理解) 家用电压220v.而USB电源为5V电压。

  1. 目标:   定义一个客户端使用的特定接口。()

  2. 客户:   使用目标接口,与和目标接口一致的对象合作。

  3. 被适配器:一个现存需要匹配的接口。(家里220V电源)

  4. 适配器:负责将被适配者的接口转换成目标的接口。(电压转换器)



实现步骤:

1.首先家里有个插座提供220V电压。类名:Receptacle(插座)
该插座有个功能。即:提供220V电压

public class Receptacle {
    public int provideHomeVoltage() {
        System.out.println("有一个插座提供220V电压");
        return 220;
    }
}

2.定义适配器,这里指变压器,变压器提供转换接口。可转换电压

public interface TransformerAdapter {
     //转换电压
     public int transformVoltage();
}


public class TransformerDevice implements TransformerAdapter{
    Receptacle receptacle;
    public Receptacle getReceptacle() {
        return receptacle;
    }
    public void setReceptacle(Receptacle receptacle) {
        this.receptacle = receptacle;
    }
    @Override
    public int transformVoltage() {
        int volatage=receptacle.provideHomeVoltage();
        int lowerVolatage=volatage/44;
        System.out.println("转化中电压为="+lowerVolatage+"v");
        return lowerVolatage;
    }
}

3.5V电源USB 设备

public class USBDevice {
     private TransformerAdapter adapter;
    public TransformerAdapter getAdapter() {
        return adapter;
    }
    public void setAdapter(TransformerAdapter adapter) {
        this.adapter = adapter;
    }
    //USB输入电压
    public void inputVoltage(){
        System.out.println("得到输入电压" +adapter.transformVoltage()+"v");
    }
}


客户:测试

public static void main(String[] args) {
        //定义一个插座
        Receptacle re=new Receptacle();
        //给插座供电
        re.provideHomeVoltage();
        //定义变压器
        TransformerDevice transformerDevice=new TransformerDevice();
        //提供变压器输入电源
        transformerDevice.setReceptacle(re);
        //USB 5V电压设备
        USBDevice usb=new USBDevice();
        //USB 连接一个变压器
        usb.setAdapter(transformerDevice);
        //
        usb.inputVoltage();
    }


输出:180049_tGOO_1014842.png

这样,对象适配器模式就完成啦。

类适配器就是将适配器继承被适配者。

两者的区别有以下几点

     1.类适配器模式需要创建自身来创建一个Receptacle

       对象适配器模式可以直接使用一个已有的Receptacle的实例来转换接口。

     2. 类适配器继承了Adaptee,所以可以通过覆写来扩展provideHomeVoltage();

       对象适配器和Adaptee是包含关系不能扩展;(其实也可以扩展的见下面)

     3.类适配器模式因为是继承所以相对静态,而对象适配器模式是包含是组合相对灵活(可以通过写Receptacle子类扩展功能)


想了想变压器。在现实中的优缺点。得到如下:

优点:
 1.将两个不同接口联系起来。耦合性低。
 2.主要将具体实现封装在适配器中.(这个例子里。电源转换输入输出功能主要在变压器中实现,而不是在插座内)
 3.灵活性和扩展性都非常好,符合开闭原则
缺点:
 1.过多的使用适配器,会使系统非常零乱。
 


参考:

http://blog.sina.com.cn/s/blog_629b701e0100zajs.html;

http://blog.youkuaiyun.com/jason0539/article/details/22468457

《大话设计模式》

转载于:https://my.oschina.net/u/1014842/blog/639460

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值