结构型模式-外观模式

suaxi
2022-09-07 / 0 评论 / 36 阅读 / 正在检测是否收录...
(1)概述

外观模式又称门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更容易被访问,外部应用程序无需关心内部子系统的具体细节,它是“迪米特法则”的典型应用

(2)结构
  • 外观角色:为多个子系统对外提供一个共同的接口
  • 子系统角色:实现系统的部分功能,客户可以通过外观角色访问它
(3)案例

以智能音箱控制家电为例

5.外观模式(智能音箱案例).png

外观角色

public class SmartApplicationFacade {

    private Light light;
    private TV tv;
    private AirCondition airCondition;

    public SmartApplicationFacade() {
        light = new Light();
        tv = new TV();
        airCondition = new AirCondition();
    }

    public void say(String message) {
        if (message.contains("开")) {
            on();
        } else if (message.contains("关")) {
            off();
        } else {
            System.out.println("主人,你在说什么?");
        }
    }

    private void on() {
        //一键打开
        light.on();
        tv.on();
        airCondition.on();
    }

    private void off() {
        light.off();
        tv.off();
        airCondition.off();
    }
}

子系统角色

public class TV {

    public void on() {
        System.out.println("开电视");
    }

    public void off() {
        System.out.println("关电视");
    }
}

public class Light {

    public void on() {
        System.out.println("开灯");
    }

    public void off() {
        System.out.println("关灯");
    }
}

public class AirCondition {

    public void on() {
        System.out.println("开空调");
    }

    public void off() {
        System.out.println("关空调");
    }
}

测试

public class Client {
    public static void main(String[] args) {
        SmartApplicationFacade smartApplicationFacade = new SmartApplicationFacade();
        smartApplicationFacade.say("开灯");
        System.out.println("==========================");
        smartApplicationFacade.say("关电视");
    }
}
(4)优缺点
  • 降低了子系统与客户端之间的耦合度
  • 对客户屏蔽了子系统组件
  • 不符合开闭原则
(5)使用场景
  • 对分层系统构建时,使用外观模式定义每层的入口点可以简化子系统之间的依赖关系
  • 当一个复杂系统的子系统很多时,外观模式可以提供简单的接口供外界访问
  • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将他们分离从而提高子系统的独立性和可移植性
0

评论 (0)

取消