zoukankan      html  css  js  c++  java
  • 《图解设计模式》读书笔记1-2 Adapter模式

    Adapter即适配器,可以类比为将220V的电压的电源转为5V电压的手机充电器,起转换的作用。

    • 明确概念:
      Adaptee:被适配者,即220v电压的电源
      Adapter:适配器,即手机充电器
      Target:适配目标,即输出5V电压
      Client:请求适配者,即手机

    • Adapter模式有两种实现:

    1. 使用继承的适配器。

    类图

    代码

    //Adaptee
    public class Banner {
        private String string;
        public Banner(String string) {
            this.string = string;
        }
        public void showWithParen() {
            System.out.println("("+string+")");
        }
        public void showWithAster() {
            System.out.println("*" + string + "*");
        }
    }
    
    //Target
    public interface Print {
        public abstract void printWeak();
        public abstract void printStrong();
    }
    
    //Adapter
    public class PrintBanner extends Banner implements Print {
        public PrintBanner(String string) {
            super(string);
        }
        @Override
        public void printWeak() {
            showWithParen();
        }
        @Override
        public void printStrong() {
            showWithAster();
        }
    }
    
    //Client
    public static void main(String[] args) {
            Print p = new PrintBanner("Hello");
            p.printWeak();
            p.printStrong();
    }
    
    1. 使用委托的适配器。

    类图

    代码

    //Adaptee
    public class Banner {
        private String string;
        public Banner(String string) {
            this.string = string;
        }
        public void showWithParen() {
            System.out.println("("+string+")");
        }
        public void showWithAster() {
            System.out.println("*" + string + "*");
        }
    }
    
    //Target
    public abstract class Print {
        public abstract void printWeak();
        public abstract void printStrong();
    }
    
    //Adapter
    public class PrintBanner extends Print {
        private Banner banner;
        public PrintBanner(String string) {
            this.banner = new Banner(string);
        }
        public void printWeak() {
            banner.showWithParen();
        }
        public void printStrong() {
            banner.showWithAster();
        }
    }
    
    //Client
    public static void main(String[] args) {
            Print p = new PrintBanner("Hello");
            p.printWeak();
            p.printStrong();
    }
    
    • 两种实现方式的区别
      Adapter根据不同的Target类型分别进行实现。如果Target是接口,那Adapter就继承Adaptee,使用Adaptee的方法实现Target的方法。如果Target是抽象类,那Adapter就在自己内部创建Adaptee对象,继承Target类,调用Adaptee对象的方法实现Target类的方法。

    • 为什么使用这种模式
      很多时候,我们不是从零开始编程的,要尽量复用现有的经过充分测试的类。此时使用Adapter模式对这个类进行适配,借用这个类的已有方法开发新功能,减轻测试负担。
      还有更多的应用场景,比如提高与旧版本的兼容性。但我现在还不能完全理解。

  • 相关阅读:
    win32获取其它进程变量地址存放的信息
    c#中的组件拖拽和MouseMove事件
    C# 使用消息驱动
    python使用dbm持久字典详解
    python http请求
    Windows 7下解决因为itunes备份导致C盘过度臃肿问题
    鼠标形状
    IE Haslayout 详解摘自网友
    Zoom属性摘自网友
    css公共属性
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10992678.html
Copyright © 2011-2022 走看看