設計模式之 外觀模式
0x01:外觀模式簡介
外觀模式(又稱門面模式),通過外觀的包裝,使應用程序只能看到外觀對象,而不會看到具體的細節(jié)對象,這樣無疑會降低應用程序的復雜度,并且提高了程序的可維護性。UML類圖如下:

其中Facade是外觀角色,也叫門面角色,客戶端可以調用這個角色的方法,此角色知曉子系統(tǒng)的所有功能和責任,將客戶端的請求代理給適當?shù)淖酉到y(tǒng)對象;
Subsystem是子系統(tǒng)角色,可以同時擁有一個或多個子系統(tǒng),每一個子系統(tǒng)都不是一個單獨的類,而是一個類的集合,子系統(tǒng)并不知道門面的存在。
0x02:外觀模式的實現(xiàn)
定義子系統(tǒng)Subsystem
public?class?SubSystemA?{
????public?void?dosomethingA()?{
????????System.out.println("SubSystemA?dosomethingA");
????}
}
public?class?SubSystemB?{
????public?void?dosomethingB()?{
????????System.out.println("SubSystemB?dosomethingB");
????}
}
外觀角色Facade
public?class?Facade?{
????//被委托的對象
????private?SubSystemA?a;
????private?SubSystemB?b;
????public?Facade()?{
????????a?=?new?SubSystemA();
????????b?=?new?SubSystemB();
????}
????//提供給外部訪問的方法
????public?void?methodA()?{
????????this.a.dosomethingA();
????}
????public?void?methodB()?{
????????this.b.dosomethingB();
????}
}
測試代碼
public?class?Client?{
????public?static?void?main(String[]?args)?{
????????Facade?facade?=?new?Facade();
????????facade.methodA();
????????facade.methodB();
????}
}
0x03:應用
因為程序員薪資普遍相對較高,所以一般有些小錢。那如何進行財富管理呢?自己購買股票呢?又不能很好的掌握買賣點,經常被人割韭菜。那還有什么管理財富的渠道嗎?購買基金就是一個不錯的渠道。
股票、國債、期貨類
public?class?Stock{
????//買股票
????public?void?buy()?{
????????System.out.println("股票1買入");
????}
????//賣股票
????public?void?sell()?{
????????System.out.println("股票1賣出");
????}
}
public?class?NationalDebt{
????//買國債
????public?void?buy()?{
????????System.out.println("國債1買入");
????}
????//賣國債
????public?void?sell()?{
????????System.out.println("國債1賣出");
????}
}
public?class?Futures{
????//買期貨
????public?void?buy()?{
????????System.out.println("期貨1買入");
????}
????//賣期貨
????public?void?sell()?{
????????System.out.println("期貨1賣出");
????}
}
基金類
基金經理人通過該類作為中間交互者,可以接受投資者的資金,統(tǒng)一對股票、國債、期貨進行購買和贖回操作。
public?class?Fund?{
????private?Stock?stock;
????private?NationalDebt?nationalDebt;
????private?Futures?futures;
????public?Fund()?{
????????stock?=?new?Stock();?//配置30%
????????nationalDebt?=?new?NationalDebt();?//配置60%
????????futures?=?new?Futures();?//配置20%
????}
????//購買基金
????public?void?buyFund()?{
????????stock.buy();
????????nationalDebt.buy();
????????futures.buy();
????}
????//贖回基金
????public?void?sellFund()?{
????????stock.sell();
????????nationalDebt.sell();
????????futures.sell();
????}
}
上面這是一個基金,它配置了30%的股票+60%的國債+20%期貨。
程序員購買和贖回基金操作
public?class?Client?{
????public?static?void?main(String[]?args)?{
????????Fund?fund?=?new?Fund();
????????//基金購買
????????fund.buyFund();
????????System.out.println("》》》》》》》》》》》》");
????????//基金贖回
????????fund.sellFund();
????}
}
這樣的話,再也不怕炒股被割韭菜了。

喜歡,在看+轉發(fā)
評論
圖片
表情
