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);
        }
    }
  • 相关阅读:
    未来简史之数据主义(Dataism)
    10分钟看懂《人类简史》和《未来简史》
    SignalR来做实时Web聊天
    .Net Core应用搭建的分布式邮件系统设计
    AspNetCore-MVC实战系列(四)之结尾
    AspNetCore-MVC实战系列(三)之个人中心
    AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码
    AspNetCore
    爱留图
    .NetCore上传多文件的几种示例
  • 原文地址:https://www.cnblogs.com/caoxb/p/9535358.html
Copyright © 2011-2022 走看看