外观模式(Facade Pattern,门面模式)
结构性设计模式
外观模式(Facade Pattern)隐藏复杂的系统内部,对外提供一个简单的调用接口。
1. 介绍
意图:提供一个简单的接口,隐藏内部复杂的调用逻辑。( 封装交互,简化调用。 )
优点:
- 提高灵活性(子系统相对独立)
- 提高了安全性 (预防低水平人员带来的风险)
缺点:
- 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
包含的角色:
- 外观角色:( 客户可以调用外观角色的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和职责,将客户端发来的请求,委派到具体的请求中去,传递给相应的子系统处理。)
- 子系统角色:(软件系统中可能有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,它实现子系统的功能。每一个子系统都可以被客户端直接调用,或者被外观角色调用。)
应用场景:
- 客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
- 定义系统的入口。
应用实例:
- 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
- JAVA 的三层开发模式
2. 代码实现
class Cpu{
public void open(){
System.out.println("CPU open");
}
public void close(){
System.out.println("CPU close");
}
}
class Ssd{
public void open(){
System.out.println("SSD open");
}
public void close(){
System.out.println("SSD close");
}
}
class Ddr{
public void open(){
System.out.println("DDR open");
}
public void close(){
System.out.println("DDR close");
}
}
class Computer{
private Ddr ddr = new Ddr();
private Ssd ssd = new Ssd();
private Cpu cpu = new Cpu();
public void open(){
cpu.open();
ssd.open();
ddr.open();
}
public void close(){
ddr.close();
ssd.close();
cpu.close();
}
}