生活随笔
收集整理的這篇文章主要介紹了
外观(门面)模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
外觀(門面)模式 (Facade Pattern)
定義:為子系統(tǒng)中的一組接口提供一個一致的界面,facaede模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
引入:1病人與醫(yī)院
把醫(yī)院作為一個子系統(tǒng),這個系統(tǒng)可以分為掛號,門診,化驗(yàn),收費(fèi)等。病人就如同一個子系統(tǒng)的客戶端與另一個子系統(tǒng)的各個類打交道一樣,不是一件容易的事情。
可以設(shè)置一個接待員的位置,由接待員負(fù)責(zé)代為掛號,收費(fèi),取藥等,這個接待員就是門面模式的體現(xiàn)。
2 投資者買股片vs基金
投資者買股票,需要了解股票的各種信息,預(yù)測它的未來,風(fēng)險(xiǎn)反而大
投資者買基金,基金經(jīng)理人相對專業(yè),不容易像散戶那么盲目,基金經(jīng)理人拿這些錢去做投資,然后大家獲利
由于在眾多投資者對眾多股票的聯(lián)系太多,反而不利于操作,耦合性過高。而有了基金以后,變成了眾多用戶只和基金打交道,實(shí)際的操作卻是基金經(jīng)理人在與上千只股票和其他投資產(chǎn)品打交道。
class Stock1
{public void Sell(){System
.out
.println("股票1賣出");}public void Buy(){System
.out
.println("股票1買入");}
}
class Stock2
{public void Sell(){System
.out
.println("股票2賣出");}public void Buy(){System
.out
.println("股票2買入");}
}
class Stock3
{public void Sell(){System
.out
.println("股票3賣出");}public void Buy(){System
.out
.println("股票3買入");}
}
class NationalDebt1
{public void Sell(){System
.out
.println("國債賣出");}public void Buy(){System
.out
.println("國債買入");}
}
class Realty
{public void Sell(){System
.out
.println("房地產(chǎn)賣出");}public void Buy(){System
.out
.println("房地產(chǎn)買入");}
}
class Fund
{Stock1 gu1
;Stock2 gu2
;Stock3 gu3
;NationalDebt1 nd1
;Realty rt1
;public Fund() {gu1
=new Stock1();gu2
=new Stock2();gu3
=new Stock3();nd1
=new NationalDebt1();rt1
=new Realty();}public void BuyFund(){gu1
.Buy();gu2
.Buy();gu3
.Buy();nd1
.Buy();;rt1
.Buy();;}public void SellFund(){gu1
.Sell();gu2
.Sell();gu3
.Sell();nd1
.Sell();rt1
.Sell();}
}public class main
{public static void main(String
[] args
) {Fund jijin
=new Fund();jijin
.BuyFund();jijin
.SellFund();
}
}
class SubSystemOne
{public void MethodOne(){System
.out
.println("子系統(tǒng)方法一");}
}
class SubSystemTwo
{public void MethodTwo(){System
.out
.println("子系統(tǒng)方法二");}
}
class SubSystemThree
{public void MethodThree(){System
.out
.println("子系統(tǒng)方法三");}
}
class SubSystemFour
{public void MethodFour(){System
.out
.println("子系統(tǒng)方法四");}
}
class Facade
{SubSystemOne one
;SubSystemTwo Two
;SubSystemThree Three
;SubSystemFour Four
;public Facade(){one
=new SubSystemOne();Two
=new SubSystemTwo();Three
=new SubSystemThree();Four
=new SubSystemFour();}public void MethodA(){System
.out
.println("\n方法組A()");one
.MethodOne();Two
.MethodTwo();Four
.MethodFour();}public void MethodB(){System
.out
.println("\n方法組B()");Two
.MethodTwo();Three
.MethodThree();}
}
public class main
{public static void main(String
[] args
) {Facade facade
=new Facade();facade
.MethodA();facade
.MethodB();}
}
保安系統(tǒng)的例子
一個保安系統(tǒng)由兩個錄像機(jī),三個電燈,一個遙感器和一個警報(bào)器組成
保安系統(tǒng)的操作人員需要經(jīng)常將這些儀器啟動和關(guān)閉。
在外觀模式通常只需要
外觀模式使用的三個階段:
- 設(shè)計(jì)初期,應(yīng)該有意識將不同的兩個層分離,這樣可以為復(fù)雜的子系統(tǒng)提供一個簡單的接口使得耦合度大大降低。
- 在開發(fā)階段,子系統(tǒng)往往因?yàn)椴粩嗟闹貥?gòu)演化而變得越來越復(fù)雜,增加外觀Facaed可以提供一個簡單的接口,減少它們之間的依賴。在維護(hù)一個遺留的大型系統(tǒng)時,可以使用外觀模式Facaed:為新系統(tǒng)開發(fā)一個外觀Facaed類,來提供設(shè)計(jì)粗糙或高度復(fù)雜的遺留代碼的比較清晰的簡單接口,讓新系統(tǒng)與Facaed對象交互。
- 希望包裝或隱藏原有系統(tǒng)
外觀模式的優(yōu)點(diǎn)
- 屏蔽了外部客戶端和系統(tǒng)內(nèi)部模板的交互。
- Facaed的功能可以被多個客戶端調(diào)用,可以實(shí)現(xiàn)復(fù)用
- 對使用Facaed的人員來說,Facaed大大的節(jié)省了他們的學(xué)習(xí)成本。
本質(zhì):
封裝交互,簡化調(diào)用
總結(jié)
以上是生活随笔為你收集整理的外观(门面)模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。