• 设计模式之适配器模式


    适配器模式

    概述

    适配器模式定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

    生活中的适配

    如果你自己接过水管或者自己接过洗衣机的水管头,你肯定有过类似的体验,无论你怎么接,它都会漏水,然后去店里一问,就知道有水管转换接头这么个东西。他可以让两个粗细不同对接不上的水管无缝的对接在一起。

    面向对象的适配器

    两套系统的使用接口不一致,但是你想将两套系统给对接起来,你就必须设计一个适配器将两个接口对接起来,这样你就可以在一个系统中调用另外一个系统的实现方案。

      

    UML

    使用场景

    • 系统需要使用现有的类,而此类的接口不符合系统的要求,即接口不兼容
    • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作
    • 需要一个统一的输出接口

    示例

    现实生活中的变压器。假设一个手机充电器需要的电压是20V,但是正常的电压是220V,这时候就需要一个变压器,将220V的电压转换成20V的电压,这样,变压器就将20V的电压和手机联系起来了

    package com.dyleaf.structure.Adapter;
    
    /**
     * 手机类
     */
    public class Phone {
        public static final int V = 220;// 正常电压220v,是一个常量
    
        private VoltageAdapter adapter;
    
        // 充电
        public void charge() {
            adapter.changeVoltage();
        }
    
        public void setAdapter(VoltageAdapter adapter) {
            this.adapter = adapter;
        }
    }
    
    
    package com.dyleaf.structure.Adapter;r;
    
    
    /**
     * 变压器
     */
    public class VoltageAdapter {
        // 改变电压的功能
        public void changeVoltage() {
            System.out.println("正在充电...");
            System.out.println("原始电压:" + Phone.V + "V");
            System.out.println("经过变压器转换之后的电压:" + (Phone.V - 200) + "V");
        }
    }
    
    
    package com.dyleaf.structure.Adapter;
    
    public class Test {
        public static void main(String[] args) {
            Phone phone = new Phone();
            VoltageAdapter adapter = new VoltageAdapter();
            phone.setAdapter(adapter);
            phone.charge();
        }
    }
    

    适配器模式和装饰者模式

    • 装饰者模式主要就是组合和委托,那么他们的类型是一定不能变得,一定得一致,中途也没有类型的转换。
    • 适配器模式一定要进行接口的转换。这就是他们最大的区别。

    see source code

  • 相关阅读:
    STM32 Timer : Base Timer, Input Capture, PWM, Output Compare
    Bus Blaster v4 design overview
    JTAG Communications model
    ARM JTAG 信号 RTCK 应该如何处理?
    HappyJTAG2
    用SWD调试接口测量代码运行时间 ( SWO )
    ARM Cortex Design Considerations for Debug
    Technical Information ARM-related JTAG / SWD / SWV / ETM Target Interfaces
    Keil debugging techniques and alternative printf (SWO function)
    Serial Wire Viewer (SWV)
  • 原文地址:https://www.cnblogs.com/Dyleaf/p/8507043.html
Copyright © 2020-2023  润新知