设计模式之适配器模式

什么是适配器模式?
官方解释:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。又称为转换器模式、变压器模式、包装(Wrapper)模式(把已有的一些类包装起来,使之能有满足需要的接口)。
个人理解:为解决所拥有的接口与所要使用的接口不一致产生问题的一种策略。
延伸:一般能在设计初期统一调用接口最好,到了后期接口改动成本过大或者无法修改时采用适配器进行补救。当然除过一些必须使用适配模式或者刻意使用适配器的,如第三方插件的开发
适配器要素:目标接口、被适配者、适配器、客户
这里以电压为例,国标电压220V,美国电压110V,当美国的电器到了中国无法直接使用时怎么办?解决方案:使用变压器。目标接口,即所期望使用的接口,也就是220国标电压;被适配者,也就是带有110V的美国电器;适配器当然是变压器了,客户自然不用说,谁使用谁就是客户。
而我们在使用适配器模式时也会出现不同的实现,即类适配器与对象适配器。
类适配器:继承被适配类同时实现目标接口
对象适配:实现目标接口,将被适配类进行关联以调用被适配类的方法。具体代码如下:
1.目标接口
public interface GBKVoltage {
     public void inputGbkVoltage();
}
2.目标接口的实现类(不使用适配器时的调用的类)
public class GBKVoltageImpl implements GBKVoltage{
    @Override
    public void inputGbkVoltage() {
        System.out.println("国标电压220V");
    }
}
3.被适配接口
public interface USAVoltage {
public void inputVoltage();
}
4.被适配接口的实现(被适配者)
public class USAVoltageImpl implements USAVoltage{
@Override
public void inputVoltage() {
System.out.println("美国电压110V");
}
}
5.类适配器
public class ClassAdapter extends USAVoltageImpl implements GBKVoltage{
@Override
public void inputGbkVoltage() {
this.inputVoltage();
}
}
6.对象适配器
public class OblectAdapter implements GBKVoltage{
USAVoltage usa=new USAVoltageImpl();
@Override
public void inputGbkVoltage() {
usa.inputVoltage();
}
}
7.测试类(客户)

    
    
public class Client {   
     public static void main(String[] args) {     
     //普通功能     
     GBKVoltage gbkv = new GBKVoltageImpl();     
     gbkv.inputGbkVoltage();     
     //对象适配       
     GBKVoltage ada=new OblectAdapter();     
     ada.inputGbkVoltage();    
     //类适配     
     GBKVoltage gbk1=new ClassAdapter();    
      gbk1.inputGbkVoltage();  
   }
 }




可能有的人在学习适配器模式时常常弄不清楚哪个是目标接口,哪个是源接口。这里强调一下,目标接口即客户所期望使用的接口(本例中指国标220V电压),源接口即不能直接使用的接口,也就是要变换的接口(本例中美国的110V电压)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值