设计模式之适配器模式

适配器模式--导读

  现如今手机越来越离不开我们的生活,手机没电无疑是对我们的一种危险信号,特别是在我们外出的时候。我们一定碰到这样的情况,当我们问其他人充电器的时候,你可能会发现人家的是typec 的但是你是安卓的。你又用不了别人的充电器而只能干着急。所以我们需要一个适配器来解决这种端口不匹配的问题。

适配器模式--定义

  适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

适配器模式--结构

                                                                                                          

         这个适配器模式充满着良好的面向设计原则:使用对象组合,以修改的接口包装别适配者。而且这样做还有一个优点,被适配者的任何子类,都可以搭配适配器使用。

         适配器模式有如下四个角色:

            Target:目标抽象类

            Adapter:适配器类

            Adaptee:适配者类

            Client:客户类

适配器模式--代码实现

  现在我们就以手机充电器为例子来实现:

AndriodCharger.java
package Adapter_Pattern;
/**
 * 安卓充电器
 * @author liu
 *
 */
public interface AndriodCharger {
    public void Andriodcharger(String type);
}
TypeCCharger.java
package Adapter_Pattern;
/**
 * typec的从电器
 * @author liu
 *
 */
public interface TypeCCharger {
    public void TypecCharger(String type);
}

MyCharger.java

package Adapter_Pattern;
/**
 * 自己的typec从电器
 * @author liu
 *
 */
public class MyCharger implements TypeCCharger {

    @Override
    public void TypecCharger(String type) {
        if(type.equals("typec"))
            System.out.println("使用typec充电器在充电");
        else
            System.out.println("插口不匹配,不能充电");

    }

}
OthersCharger.java
package Adapter_Pattern;
/**
 * 别人的安卓从电器
 * @author liu
 *
 */
public class OthersCharger implements AndriodCharger {

    
    public void Andriodcharger(String type) {
        if(type.equals("安卓"))
            System.out.println("使用安卓的充电器充电");
        else
            System.out.println("端口不匹配,不能充电");
    }

}
TypeCAdapter.java
package Adapter_Pattern;
/**
 * typec的适配器
 * @author liu
 *
 */
public class TypeCAdapter implements TypeCCharger {
    AndriodCharger androidCharger;
    
    public TypeCAdapter(String type) {
        if(type.equals("安卓"))
            androidCharger=new OthersCharger();
    }
    
    public void TypecCharger(String type) {
        if(type.equals("typec"))
            System.out.println("使用typec充电器在充电中");
        else if(type.equals("安卓"))
            androidCharger.Andriodcharger(type);
        else
            System.out.println("端口不匹配不能充电");
        
    }

}

client.java

package Adapter_Pattern;
/**
 * 模拟
 * @author liu
 *
 */
public class Client {
    public static void main(String[] args) {
        MyCharger myCharger=new MyCharger();
        //当我没带typec充电器时,别人只有安卓充电器
        myCharger.TypecCharger("安卓");
        //因为串口不匹配所以我们需要使用,适配器来进行适配
        TypeCAdapter adapter=new TypeCAdapter("安卓");
        //这样我们就能使用安卓的充电器给typec手机端口充电了
        adapter.TypecCharger("安卓");
    }
}

适配器模式--优缺点

  优点:

  ①可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”(这点是两种实现方式都具有的)

  ②采用 “对象组合”的方式,更符合松耦合。

  缺点:

  ①使得重定义Adaptee的行为较困难,这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

适配器模式--场景

  1、系统需要使用现有的类,而此类的接口不符合系统的需要。

  2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

  3、通过接口转换,将一个类插入另一个类系中

原文地址:https://www.cnblogs.com/sank/p/10679720.html