(1)概述
外观模式又称门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更容易被访问,外部应用程序无需关心内部子系统的具体细节,它是“迪米特法则”的典型应用
(2)结构
- 外观角色:为多个子系统对外提供一个共同的接口
- 子系统角色:实现系统的部分功能,客户可以通过外观角色访问它
(3)案例
以智能音箱控制家电为例
外观角色
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)