程序员

设计模式-结构篇(适配器模式)

2017-02-10  本文已影响0人  小酷哥
适配器模式

将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。

优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。

缺点:
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

实例:
一个MacBook笔记本只支持三插头的。但是我们的墙角只有一个两插头的插座,
所以需要一个转换头(适配器),将两插头变为三插头,好让我们笔记本使用

/**
 * Created by malei on 2016/12/5.
 */
public class MacBook {

    private  ThreePlug plug;

    public MacBook(ThreePlug plug){
        this.plug = plug;
    }

    //充电
    public void charge(){
        System.out.println("使用三相电流供电");
        plug.powerwith3();
    }
    public static void main(String[] args){
        Adapter_2to3 adapter = new Adapter_2to3();
        MacBook book = new MacBook(adapter);
        book.charge();

    }
}

/**
 * Created by malei on 2016/12/5.
 * 三插头的接口
 */
public interface ThreePlug {
    //给电
    void powerwith3();
}

/**
 * Created by malei on 2016/12/5.
 * 国标二相插座,即需要适配的类(Adaptee)
 * 墙上的插座居然是两相的
 */
public class GBTwoPlug {
    public void powerwith2(){
        System.out.println("使用二相电流供电");
    }
}

/**
 * Created by malei on 2016/12/5.
 * 二相转三相的适配器(Adapter)
 */
public class Adapter_2to3 extends GBTwoPlug implements ThreePlug{

    @Override
    public void powerwith3() {
        Log.show("适配器启动");
        this.powerwith2();
    }
}
上一篇下一篇

猜你喜欢

热点阅读