外觀模式

外觀模式Facade,爲子系統的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。


例子:炒股

投資者可能面對多種股票

package Facade;

public class Stock1 {
	public void sell(){
		System.out.println("股票1賣出");
	}
	public void buy(){
		System.out.println("股票1買入");
	}
}
package Facade;

public class Stock2 {
	public void sell(){
		System.out.println("股票2賣出");
	}
	public void buy(){
		System.out.println("股票2買入");
	}
}
package Facade;

public class Stock3 {
	public void sell(){
		System.out.println("股票3賣出");
	}
	public void buy(){
		System.out.println("股票3買入");
	}
}
package Facade;

public class realty {
	public void sell(){
		System.out.println("房地產賣出");
	}
	public void buy(){
		System.out.println("房地產買入");
	}
}
package Facade;

public class nationalDebt {
	public void sell(){
		System.out.println("國債賣出");
	}
	public void buy(){
		System.out.println("國債買入");
	}
}

增加一個基金類,它需要了解所有的股票或其他投資方法的方法或者屬性,進行組合,以備外界調用。

package Facade;

public class Fund {
	Stock1 gu1;
	Stock2 gu2;
	Stock3 gu3;
	nationalDebt nd;
	realty rt;
	public Fund(){
		gu1=new Stock1();
		gu2=new Stock2();
		gu3=new Stock3();
		nd=new nationalDebt();
		rt=new realty();
	}
	public void buyFund(){
		gu1.buy();
		gu2.buy();
		gu3.buy();
		nd.buy();
		rt.buy();
	}
	public void sellFund(){
		gu1.sell();
		gu2.sell();
		gu3.sell();
		nd.sell();
		rt.sell();
	}
}

客戶端去調用,此時用戶不需要了解股票,甚至可以對股票一無所知,參與股票的具體買賣都由基金公司完成

package Facade;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fund jijin=new Fund();
		jijin.buyFund();
		jijin.sellFund();
	}

}

Facade方法實現中,一般是負責把客戶端的請求轉發給子系統內部的各個模塊進行處理,Facade的方法本身並不進行功能的處理,只是實現一個功能的組合調用。

優點:

1.鬆散耦合,外觀模式送傘了客戶端與子系統的耦合關係,讓子系統內部的模塊能更容易擴展和維護

2.簡單易用,外觀模式讓子系統更加易用,客戶端不再需要了解子系統內部的實現,也不需要跟衆多子系統內部的模塊進行交互,只需要跟外觀交互就可以了,相當於外觀類爲外部客戶端使用子系統提供了一站式服務

3.更好的劃分訪問層次,有些方法是對系統外的,有些方法是系統內部使用的,把需要保留給外部的功能集中到外觀中,這樣既方便客戶端使用,也很好的隱藏了內部的細節

針對上述優點,何時選用外觀模式?

1.希望爲一個複雜的子系統提供一個簡單接口,使用外觀對象實現大部分客戶需要的功能,從而簡化客戶的使用

2.想讓客戶程序和抽象類的實現部分鬆散耦合,使用外觀對象將這個子系統與它的客戶分離開,從而提高子系統的獨立性和可移植性

3.如果構建多層結構的系統,可以考慮使用外觀模式,使用外觀對象作爲每層的入口,既可以簡化層間調用,也可以鬆散層次之間的依賴關係

參考:

《大話設計模式》

https://my.oschina.net/xianggao/blog/615213

發佈了92 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章