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

1. 适配器模式简介               

                          

适配器模式的结构:
  目标(Target)角色:这就是所期待得到的接口,由于这里讨论的是类适配器模式,因此目标不可以是类。
  源(Adaptee)角色:被适配的接口(可以是接口或者类)。
  适配器(Adapter)角色:适配器类是本模式的核心,适配器把源接口转换成目标接口,显然这一角色不可以是接口,而必须是具体类。
适配器模式有 类的适配器模式 对象的适配器模式 两种不同的形式.

                           

2. 适配器模式的实现

以插头和插座来说明适配器模式的用途:
  笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本
电脑无法使用,这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情。

2.1 使用组合的方式实现插座适配器(对象适配器)

笔记本的插头是三相的,所以应该使用三相插座来供电

public interface ThreePlugIf {      //三相插座接口

    //使用三相电流供电
    public void powerWithThree();
}

但目前没有三相插座,只有二相插座(GB)

public class GBTwoPlug {
    
//供电方法 public void powerWithTwo(){ System.out.println("使用二相电流供电"); } }

所以作为一个使用三相插头供电的笔记本,想要用电就需要将二相插座转换为三相,适配器就出现了

public class NoteBook {

    private ThreePlugIf plug; //创建一个三相插座的成员变量
    
    public NoteBook(ThreePlugIf plug){  //笔记本的构造方法
        this.plug = plug;
    }
    //使用插座充电(笔记本是使用三相插头的)
    public void charge(){
        plug.powerWithThree();
    }
    

    public static void main(String[] args) {
        //只有二相的国标插座,没有三相的,这时需要一个将二相插座转换为三相的适配器
        GBTwoPlug two=new GBTwoPlug();
        ThreePlugIf three=new TwoPlugAdapter(two); //二相转三相
         
        NoteBook nb=new NoteBook(three);
        nb.charge(); //供电
    } 
}

二相转三相的插座适配器

public class TwoPlugAdapter implements ThreePlugIf {

    private GBTwoPlug gBTwoPlug;    //二相插座
    public TwoPlugAdapter(GBTwoPlug gBTwoPlug){
        this.gBTwoPlug = gBTwoPlug;
    }
    
    @Override
    public void powerWithThree() {
         System.out.println("通过转化");
         gBTwoPlug.powerWithTwo();
          
    }
}

运行笔记本的main方法可得

对以上过程的分析:

                             

2.2  采用继承的方式实现插座适配器(类适配器)

接上面,要采用继承方式实现插座适配器,需要继承二相,同时实现三相

public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {

    @Override
    public void powerWithThree() {
        System.out.println("通过继承适配器");
           this.powerWithTwo();
    }

}

笔记本main方法如下

public class NoteBook {

    private ThreePlugIf plug; //创建一个三相插座的成员变量
    
    public NoteBook(ThreePlugIf plug){  //笔记本的构造方法
        this.plug = plug;
    }
    
    //使用插座充电(笔记本是使用三相插头的)
    public void charge(){
        plug.powerWithThree();
    }
    
    public static void main(String[] args) {
        
//只有二相的国标插座,没有三相的,这时需要一个将二相插座转换为三相的适配器 ThreePlugIf three = new TwoPlugAdapterExtends(); NoteBook nb = new NoteBook(three); nb.charge(); } }

输出

2.3 两种方法特点:

                       

3. 适配器的作用

        

原文地址:https://www.cnblogs.com/zjfjava/p/7266428.html