设计模式(行为型模式-适配器模式)

适配器模式在我们实际生活中随处可见,如充电器、电脑显示器DVI 与VGA转接头等,下面以电脑cpu和主板为例来理解适配器模式

 

 1.未使用适配器模式情形(主板 + AMD)

示例:

/**
 * 主板类(只支持AMD接口的CPU)
 **/
public class MainBoard {
    public void power(AMD amd) {
        amd.work();
    }
}

/**
 * AMD的CPU
 **/
public class AMD {
    public void work() {
        System.out.println("amd cpu work ...");
    }
}

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        MainBoard mb = new MainBoard();
        AMD amd = new AMD();
        mb.power(amd);
    }
}

通过测试结果,我们发现,电脑可以正常工作。假如有一块主板 (只支持AMD的CPU接口)  和  一块inter i7的cpu,该如何实现?

实现思路:

  1. 原来的主板不能做任何修改,即不能修改MainBoard这个类;
  2. 要使用一个适配器,并且这个适配器上有AMD接口和Inter接口;
  3. 这个适配器可以插到主板上并且能工作,因此这个适配器需实现了AMD接口、并且支持Inter的CPU类型;

2.使用适配器模式情形(主板 + 适配器 + I7 )

示例:

/**
 * Inter CPU的接口
 */
public interface Inter {
    public void work();
}

/**
 * I7 CPU,实现了Inter接口
 */
public class I7 implements Inter {
    @Override
    public void work() {
        System.out.println("inter i7 work ...");
    }
}

/**
 * AMD CPU的接口
 */
public interface AMD {
    public void work();
}

/**
 * 适配器类,将Inter的接口转换成AMD接口。
 * 1.要支持Inter接口
 * 2.需要实现AMD的接口
 */
public class Adapter implements AMD {

    private Inter inter;
    
    public Adapter(Inter inter) {
        this.inter = inter;
    }
    @Override
    public void work() {
        inter.work();
    }
    
}

/**
 * 主板类(只支持AMD接口的CPU),开始工作
 */
public class MainBoard {
    public void start(AMD amd) {
        amd.work();
    }
}

/**
 * 测试类 (主板 + 适配器 + I7)
 */
public class Test {
    public static void main(String[] args) {
        MainBoard mb = new MainBoard();
        Inter cpu = new I7();
        Adapter adapter = new Adapter(cpu);
        mb.power(adapter);
    }
}

 

posted @ 2018-08-25 21:03  cao_xiaobo  阅读(469)  评论(0编辑  收藏  举报