外觀模式

定義:java

提供統一接口,訪問子系統中的一羣接口。函數


現實中的外觀模式:
this

醫院的例子

  現代的軟件系統都是比較複雜的,設計師處理複雜系統的一個常見方法即是將其「分而治之」,把一個系統劃分爲幾個較小的子系統。若是把醫院做爲一個子系統,按照部門職能,這個系統能夠劃分爲掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的客戶端與一個子系統的各個類打交道同樣,不是一件容易的事情。spa

  首先病人必須先掛號,而後門診。若是醫生要求化驗,病人必須首先劃價,而後繳費,才能夠到化驗部門作化驗。化驗後再回到門診室。設計

上圖描述的是病人在醫院裏的體驗,圖中的方框表明醫院。code

  解決這種不便的方法即是引進門面模式,醫院能夠設置一個接待員的位置,由接待員負責代爲掛號、劃價、繳費、取藥等。這個接待員就是門面模式的體現,病人只接觸接待員,由接待員與各個部門打交道。orm

代碼:接口

一、子系統(部門)
開發

public class Class1 {
	public void handler(){
		System.out.println("一、掛號");
	}
}
public class Class2 {
	public void handler(){
		System.out.println("二、掛門診");
	}
}
public class Class3 {
	public void handler(){
		System.out.println("三、劃價");
	}
}
public class Class4 {
	public void handler(){
		System.out.println("四、取藥");
	}
}

二、接待員get

public class Person {

	private Class1 class1;
	private Class2 class2;
	private Class3 class3;
	private Class4 class4;

	/**
	 * 之因此這裏用構造函數,不用get/set方法呢,英文這些參數都是必需要傳的,不然沒法完成流程
	 * @param class1
	 * @param class2
	 * @param class3
	 * @param class4
	 */
	public Person(Class1 class1, Class2 class2, Class3 class3, Class4 class4) {
		this.class1 = class1;
		this.class2 = class2;
		this.class3 = class3;
		this.class4 = class4;
	}

	public void goIll(){
		class1.handler();
		class2.handler();
		class3.handler();
		class4.handler();
	}
}

三、結果

一、掛號
二、掛門診
三、劃價
四、取藥

注意:

一、其實這裏存在一個BUG,因此單獨用外觀模式在現實的開發沒有任何用處。

你如今每一個步驟之間沒有關聯關係,你去每一個地方都要拿單子,才能進行下一步啊。

二、外觀模式作流程比較好

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息