Design Pattern | Facade Pattern
by Botao Xiao
Facade Pattern 外观模式
外观模式隐藏了系统的复杂性,并向客户端提供了一个访问系统的接口,该接口更加简单,并且易于使用。
Facade中的角色
- 门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
- 子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。
- 客户角色:通过调用Facede来完成要实现的功能。
Facade的实现
- 分析
- 对于用户来说,我们想使用所有的子系统,但是内部太为复杂,并不易于我们使用。
- 我们将子系统封装到Computer这个门面类中,隐藏子系统的具体实现。
- 子系统对于用户是隐藏的,我们只需要调用门面类即可实现对子系统的调用。并且子系统的统筹配合是由Computer决定的。
- 子系统(CPU, Disk, Memory)
public class CPU { public void start(){ System.out.println("CPU is starting..."); } public void shutdown(){ System.out.println("CPU shutdown..."); } } public class Disk { public void start(){ System.out.println("Disk is starting..."); } public void shutdown(){ System.out.println("Disk is shutdown..."); } } public class Memory { public void start(){ System.out.println("Memory is starting..."); } public void shutdown(){ System.out.println("Memory is shutdown..."); } }
- 创建一个门面类,用于集成所有的子系统
public class Computer { private final CPU cpu; private final Memory memory; private final Disk disk; public Computer(){ //创建了一个门面类,在门面类中定义各个子对象的实例。 this.cpu = new CPU(); this.disk = new Disk(); this.memory = new Memory(); } public void start(){ //在宏观调用中,我们统筹控制了所有的子系统,决定了使用的顺序,让复杂的子系统业务按照顺序执行。 this.cpu.start(); this.disk.start(); this.memory.start(); System.out.println("Computer is starting..."); } public void shutdown(){ this.cpu.shutdown(); this.disk.shutdown(); this.memory.shutdown(); System.out.println("Computer is shutdown..."); } public static void main(String[] args) { Computer computer = new Computer(); computer.start(); //用户不需要对子系统进行使用,只需要操作门面类。 System.out.println("==================="); computer.shutdown(); } } CPU is starting... Disk is starting... Memory is starting... Computer is starting... =================== CPU shutdown... Disk is shutdown... Memory is shutdown...
Subscribe via RSS