Head First 设计模式 —— 07. 适配器模式

2021-01-10  本文已影响0人  满赋诸机

思考题

你能想到真实世界中,还有哪些适配器的例子? P236

适配器模式解析

客户使用适配器的过程: P241

  1. 客户通过目标接口调用适配器的方法对适配器发出请求
  2. 适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口
  3. 客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用(客户和被适配者是解耦的,一个不知道另一个

思考题

如果我们也需要一个将鸭子转换成火鸡的适配器,我们称它为 DuckAdapter。请写下这个类。你如何处理飞行方法(毕竟我们知道鸭子飞得比火鸡远)? P242

public class DuckAdapter implements Turkey {
    Duck duck;
    int count = 0;

    public DuckAdapter(Duck duck) {
        this.duck = duck;
    }

    public void gobble() {
        duck.quack();
    }

    public void fly() {
        ++ count;
        if(count == 5) {
            count = 0;
            duck.fly();
        } else {
            System.out.println("I'm preparing to fly.");
        }
        // 答案用的是随机数取模的方法,平均下来每调用5次飞一下
    }
}

适配器模式

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

07. 适配器模式
特点

思考题

对象适配器(使用组合)和类适配器(使用继承)使用两种不同的适配方法。这两种实现的差异如何影响适配器的弹性? P244

对象适配器
类适配器

思考题

某些交流电适配器所做的事情不只是改变接口,它们还加了一些其他的特性,例如:电涌保护、指示灯、警报声等。
如果要你实现这类特性,你要使用什么模式? P251

所思所想

上一篇下一篇

猜你喜欢

热点阅读