持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天
介绍
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
外观模式(Facade),亦称“过程模式”。学校课程评价模式之一。美国教育学者斯泰克1967 年在所著《教育评价的外观》中提出。主张按照描述和判断资料来评价课程,关键的活动是在课程实施的全过程中进行观察和搜集意见,以了解人们对课程的不同看法。这种模式不限于检查教学的成果,重视描述和判断教学过程中各种复杂、动态的现象和事物。
使用场景
-
为复杂的模块或子系统提供外界访问的模块。
-
子系统相对独立。
-
预防低水平人员带来的风险。
应用实践
职责明确
- 外观:提供了一种访问特定子类系统功能的便捷方法,其了解如何重定向客户端请求,知晓如何操作一切活动部件
- 创建附加外观:类可以避免多种不相关的功能,污染单一外观,使其变成有一个复杂结构,客户端和其他外观都可以使用附加外观
- 复杂子系统:由数十个不同的对象构造。如果要用这些对象完成有意义的工作,你必须深入了解子系统的实现细节,比如按照正确顺序初始化对象和为其提供正确的格式数据
- 客户端:使用外观代替对子系统的直接调用
实现
/* 子模块子系统*/
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load() {
...
}
}
class HardDrive {
public byte[] read() {
...
}
}
/* 整体对接系统 */
class Computer {
public void startComputer() {
cpu.freeze();
memory.load();
cpu.jump();
cpu.execute();
}
}
/* 应用中心 */
class You {
public static void main(String[] args) {
Computer facade = new Computer();
facade.startComputer();
}
}
汇总
优点特性
-
降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类
-
对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易
-
降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象
-
只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。
缺点弊端
- 不能很好地限制客户使用子系统类,很容易带来未知风险
- 增加新的子系统可能需要修改外观类或客户端的源代码,违背了
开闭原则