外观设计模式

模式定义:
外观模式实现了新子系统和功能的分离,让系统方法的调用的顺序看起来更加的有序。为子系统中的一组接口提供一个一直的界面,此模式定义了一个高层的接口,这个接口使得子系统更容易使用。引入外观设计模式后,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();
	}

}

输出结果: