本文共 2166 字,大约阅读时间需要 7 分钟。
外观模式,也成为门面模式,它隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。
适用方要完成一个功能,需要调用提供方的多个接口、方法,调用过程复杂时,我们可以再提供一个高层接口(新的外观),将复杂的调用过程向适用方隐藏。
演变方式:
简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。
- 门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
- 子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。
- 客户角色:通过调用Facede来完成要实现的功能
举一个电脑启动,内部各子系统如CPU、磁盘、内存也会跟随着一起启动的例子。
首先是各个子系统:public class CPU { public void start() { System.out.println("cpu is start..."); } public void shutdown() { System.out.println("cpu is shutdown..."); }}
public class Disk { public void start() { System.out.println("disk is start..."); } public void shutdown() { System.out.println("disk is shutdown..."); }}
public class Memory { public void start() { System.out.println("memory is start..."); } public void shutdown() { System.out.println("memory is shutdown..."); }}
然后是门面类,Computer:
public class Computer { private CPU cpu; private Disk disk; private Memory memory; public Computer() { cpu = new CPU(); disk = new Disk(); memory = new Memory(); } public void start() { System.out.println("computer start begin"); cpu.start(); disk.start(); memory.start(); System.out.println("computer start end"); } public void shutdown() { System.out.println("computer shutdown begin"); cpu.shutdown(); disk.shutdown(); memory.shutdown(); System.out.println("computer shutdown end"); }}
然后是客户端调用:
public class ClientMain { public static void main(String[] args) { Computer computer = new Computer(); computer.start(); computer.shutdown(); }}
从上面的实例来看,有了这个Facade类,也就是Computer类,用户就不用亲自去调用子系统中的Disk,Memory、CPU类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。客户端只需要跟Facade交互就可以了
优点
转载地址:http://vwpxi.baihongyu.com/