7Head First Design Patterns(第2版)

适配器与外观模式

接口转换

适配器模式外观模式接口兼容最小知识原则

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第7章:适配器与外观模式(Adapter & Facade)

一、导读

1.1 本章学习目标

第7章讲解适配器模式和外观模式——两种用于接口转换的结构型设计模式。

1.2 为什么第七章如此重要

适配器解决接口不兼容问题,外观提供简化的统一接口。两者在实际开发中非常常用。

1.3 核心问题引导

适配器模式和外观模式有什么区别?

何时使用适配器?

外观模式如何简化复杂子系统?

最小知识原则是什么?


二、核心概念详解

7.1 适配器模式

java
// 目标接口
public interface Duck {
    void quack();
    void fly();
}

// 被适配者
public interface Turkey {
    void gobble();
    void fly();
}

// 适配器
public class TurkeyAdapter implements Duck {
    private Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; }
    
    public void quack() { turkey.gobble(); }
    public void fly() {
        for (int i = 0; i < 5; i++) turkey.fly();
    }
}

// 使用
Turkey turkey = new WildTurkey();
Duck duck = new TurkeyAdapter(turkey);
duck.quack();  // 调用 turkey.gobble()

7.2 外观模式

java
// 复杂子系统
public class HomeTheaterFacade {
    private Amplifier amp;
    private Tuner tuner;
    private DvdPlayer dvd;
    private Projector projector;
    private TheaterLights lights;
    
    public void watchMovie(String movie) {
        lights.dim(10);
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setDvd(dvd);
        amp.setSurroundSound();
        dvd.on();
        dvd.play(movie);
    }
    
    public void endMovie() {
        lights.on();
        projector.off();
        amp.off();
        dvd.stop();
        dvd.eject();
    }
}

7.3 最小知识原则

最小知识原则(迪米特法则):
- 只与直接朋友通信
- 不与陌生人说话
- 减少类之间的耦合

三、实战案例

7.1 第三方库适配

java
// 旧系统使用 Logger 接口
public interface Logger {
    void log(String message);
}

// 新的日志框架
public class NewLogger {
    public void info(String msg) { }
    public void error(String msg) { }
}

// 适配器
public class NewLoggerAdapter implements Logger {
    private NewLogger newLogger = new NewLogger();
    
    public void log(String message) {
        newLogger.info(message);
    }
}

四、本章小结

适配器转换接口使其兼容,外观简化复杂子系统的接口。两者都遵循最小知识原则,减少耦合。


五、思考与练习

适配器和外观有什么区别?

何时使用适配器模式?

外观模式如何简化设计?

最小知识原则如何应用?

适配器模式在框架集成中如何应用?


7/12适配器与
0%