GOF 设计模式小白教程之门面模式

本贴最后更新于 1941 天前,其中的信息可能已经时异事殊

门面模式(Facade)

定义:

是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

通俗解释:

玩单反的人都知道要出拍一张好的照片,涉及到调光圈,快门,调焦距,ISO 等复杂的拍摄技巧。那普通人想拍照又不想学这些复杂的拍摄技巧呢?不用担心,因为有傻瓜相机,只需要按一下快门即可拍出一张照片。傻瓜相机就相当于一个门面,而那些光圈,快门,焦距属于复杂的子系统。我们就通过门面,屏蔽了子系统的复杂性。

代码:

光圈类,用于调整光圈

public class Aperture {
    void adjustLight() {
        System.out.println("调整光圈!");
    }
}

焦距类,用于调整焦距

public class Focal {
    void adjustFocus() {
        System.out.println("调整好焦距!");
    }
}

快门类,用于按下快门

public class Shutter {
    void click() {
        System.out.println("按下快门!");
    }
}

傻瓜相机类,相当于门面 Facade,封装了复杂的拍照

public class DumpCamera {

    private Focal focal;
    private Aperture aperture;
    private Shutter shutter;

    public DumpCamera() {
        focal = new Focal();
        aperture = new Aperture();
        shutter = new Shutter();
    }
    // 拍照
    public void takePhoto() {

        focal.adjustFocus();
        aperture.adjustLight();
        shutter.click();

        System.out.println("拍出一张好照片!");

    }

}

测试门面模式

public class TestFacade {

    public static void main(String[] args) {

        DumpCamera camera = new DumpCamera();
        camera.takePhoto();

    }

}

运行结果:

调整好焦距!
调整光圈!
按下快门!
拍出一张好照片!

解析:

  1. 该模式很好的实践了迪米特法则的思想。
  2. 因为用户不直接与子系统交互,所以降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  3. 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
  4. 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...