生活随笔
收集整理的這篇文章主要介紹了
外观(门面)模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
外觀(門面)模式 (Facade Pattern)
定義:為子系統中的一組接口提供一個一致的界面,facaede模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
引入:1病人與醫院
把醫院作為一個子系統,這個系統可以分為掛號,門診,化驗,收費等。病人就如同一個子系統的客戶端與另一個子系統的各個類打交道一樣,不是一件容易的事情。
可以設置一個接待員的位置,由接待員負責代為掛號,收費,取藥等,這個接待員就是門面模式的體現。
2 投資者買股片vs基金
投資者買股票,需要了解股票的各種信息,預測它的未來,風險反而大
投資者買基金,基金經理人相對專業,不容易像散戶那么盲目,基金經理人拿這些錢去做投資,然后大家獲利
由于在眾多投資者對眾多股票的聯系太多,反而不利于操作,耦合性過高。而有了基金以后,變成了眾多用戶只和基金打交道,實際的操作卻是基金經理人在與上千只股票和其他投資產品打交道。
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("房地產賣出");}public void Buy(){System
.out
.println("房地產買入");}
}
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("子系統方法一");}
}
class SubSystemTwo
{public void MethodTwo(){System
.out
.println("子系統方法二");}
}
class SubSystemThree
{public void MethodThree(){System
.out
.println("子系統方法三");}
}
class SubSystemFour
{public void MethodFour(){System
.out
.println("子系統方法四");}
}
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();}
}
保安系統的例子
一個保安系統由兩個錄像機,三個電燈,一個遙感器和一個警報器組成
保安系統的操作人員需要經常將這些儀器啟動和關閉。
在外觀模式通常只需要
外觀模式使用的三個階段:
- 設計初期,應該有意識將不同的兩個層分離,這樣可以為復雜的子系統提供一個簡單的接口使得耦合度大大降低。
- 在開發階段,子系統往往因為不斷的重構演化而變得越來越復雜,增加外觀Facaed可以提供一個簡單的接口,減少它們之間的依賴。在維護一個遺留的大型系統時,可以使用外觀模式Facaed:為新系統開發一個外觀Facaed類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰的簡單接口,讓新系統與Facaed對象交互。
- 希望包裝或隱藏原有系統
外觀模式的優點
- 屏蔽了外部客戶端和系統內部模板的交互。
- Facaed的功能可以被多個客戶端調用,可以實現復用
- 對使用Facaed的人員來說,Facaed大大的節省了他們的學習成本。
本質:
封裝交互,簡化調用
總結
以上是生活随笔為你收集整理的外观(门面)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。