zoukankan      html  css  js  c++  java
  • 设计模式(行为型模式-适配器模式)

    适配器模式在我们实际生活中随处可见,如充电器、电脑显示器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);
        }
    }
  • 相关阅读:
    数据库架构的演变
    一个简单的跨库事务问题
    一个优美的架构需要考虑的几个问题
    铁道部新客票系统设计
    详细介绍软件架构设计的三个维度
    单代号网络图
    分库分表带来的完整性和一致性问题
    软件架构设计箴言理解
    设计高并发的电子商店
    mysql之索引补充
  • 原文地址:https://www.cnblogs.com/caoxb/p/9535358.html
Copyright © 2011-2022 走看看