Structural Patterns Part 5/7: Facade Pattern
目录
Definition
Facade Pattern提供这样一个类,这个类里的方法需要做一系列的动作才能完成一件事情。
一句话:
One class has a method that performs a complex process calling several other classes
何时使用?当一个流程的完成需要很多步骤,需要为外界提供一个统一的接口时。
使用频率: High
UML Class Diagram
Implementation
作为实例,假设一台电脑需要无线上网,那么
- 需要ISP供应商提供带宽
- 需要路由器可以提供无线网
- 需要电脑连接上无线网
因为上网都需要这三个步骤,所以可放在一个公共的接口中进行。
// Domain.java
package designpatterns.structuralpatterns.facade;
class Computer {
public void connect() {
System.out.println("Computer is connecting to the internet...");
}
}
class Router {
public void wifi() {
System.out.println("Router is booting...");
}
}
class Provider {
public void provide() {
System.out.println("Provider is preparing the network for the user...");
}
}
// FacadeDemo.java
package designpatterns.structuralpatterns.facade;
public class FacadeDemo {
public static void main(String[] args) {
Facade facade = new Facade(new Computer(), new Router(), new Provider());
facade.surf();
}
}
class Facade {
private Computer computer;
private Router router;
private Provider provider;
public Facade(Computer computer, Router router, Provider provider) {
this.computer = computer;
this.router = router;
this.provider = provider;
}
public void surf() {
System.out.println("Preparation...");
System.out.println();
provider.provide();
System.out.println("===Network Provided!===");
router.wifi();
System.out.println("===Wifi is okay!===");
computer.connect();
System.out.println("===Wifi connected!===");
System.out.println();
System.out.println("Sufing on internet now!");
}
}
// output
Preparation...
Provider is preparing the network for the user...
===Network Provided!===
Router is booting...
===Wifi is okay!===
Computer is connecting to the internet...
===Wifi connected!===
Sufing on internet now!