外观设计模式
模式定义:
外观模式实现了新子系统和功能的分离,让系统方法的调用的顺序看起来更加的有序。为子系统中的一组接口提供一个一直的界面,此模式定义了一个高层的接口,这个接口使得子系统更容易使用。引入外观设计模式后,Client只需要和外观模式的总接口facade交互,避免了复杂的和子系统进行交互。
相当于在子系统和Client之间创建了一个超级的接口,这个接口中的内容是有效的整合子系统的类的功能。
模式对象(角色)
1.Facade(外观角色)
知道子系统的功能,整合子系统的功能,负责和客户端的交互。
会有几个常用的功能组合。
2.Client(客户端)
客户端是程序的入口,负责程序的执行,他要调用子系统的功能时,创建出外观角色,让外观角色去自己整合功能和调用功能。
3.SubSystem(子系统)
实现子系统的功能,并完成外观角色指派的任务。
直接上一个UML类图(自己画图板画的,特别丑,别介意)
上代码:
SubSystem
package facade;
public class Worker_01 {
public void work() {
System.out.println("第一个工人,工作......");
}
public void rest() {
System.out.println("第一个工人,休息......");
}
}
class Worker_02 {
public void work() {
System.out.println("第二个工人,工作......");
}
public void rest() {
System.out.println("第二个工人,休息......");
}
}
class Worker_03 {
public void work() {
System.out.println("第三个工人,工作......");
}
public void rest() {
System.out.println("第三个工人,休息......");
}
}
Facade
package facade;
public class Facade {
private Worker_01 wk1;
private Worker_02 wk2;
private Worker_03 wk3;
public Facade() {
if(null==wk1) {
wk1 = new Worker_01();
}
if(null == wk2) {
wk2 = new Worker_02();
}if(null ==wk3){
wk3 = new Worker_03();
}
}
public void work() {
wk1.work();
wk2.work();
wk3.work();
}
public void rest() {
wk1.rest();
wk2.rest();
wk3.rest();
}
}
Client(测试类)
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Facade facade = new Facade();
facade.work();
facade.rest();
}
}
输出结果: