外觀模式的定義
1.定義:為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用;
外觀模式結(jié)構(gòu)圖
image-20210317093147839.png
外觀模式的實(shí)現(xiàn)
1.代碼結(jié)構(gòu)圖
image-20210317094748339.png
2.類的關(guān)系引用
image-20210317094852590.png
==代碼實(shí)現(xiàn)
1.新建子類系統(tǒng),以股票買入賣出為例
public class Stock1 {
public void sell(){
System.out.println("賣出股票1");
}
public void buy(){
System.out.println("購(gòu)買股票1");
}
}
public class Stock2 {
public void sell(){
System.out.println("賣出股票2");
}
public void buy(){
System.out.println("買入股票2");
}
}
public class Stock3 {
public void sell(){
System.out.println("賣出股票3");
}
public void buy(){
System.out.println("買入股票3");
}
}
public class Realty1 {
public void sell(){
System.out.println("賣出房地產(chǎn)股票1");
}
public void buy(){
System.out.println("買入房地產(chǎn)股票1");
}
}
public class NationDebt1 {
public void sell(){
System.out.println("賣出國(guó)債1");
}
public void buy(){
System.out.println("買入國(guó)債1");
}
}
2.新建facade類,操作具體子系統(tǒng)
public class Fund {
//基金類引用各種股票
private Stock1 stock1;
private Stock2 stock2;
private Stock3 stock3;
private Realty1 realty1;
private NationDebt1 nationDebt1;
//基金構(gòu)造器初始化時(shí)初始化各種股票
public Fund(){
this.stock1=new Stock1();
this.stock2=new Stock2();
this.stock3=new Stock3();
this.realty1=new Realty1();
this.nationDebt1=new NationDebt1();
}
//外觀類操作子系統(tǒng)各種方法
public void sell(){
System.out.println("基金賣出");
stock1.sell();
stock2.sell();
stock3.sell();
realty1.sell();
nationDebt1.sell();
}
//外觀類操作各種子系統(tǒng)
public void buy(){
System.out.println("基金買入");
stock1.buy();
stock2.buy();
stock3.buy();
realty1.buy();
nationDebt1.buy();
}
}
3.新建客戶端調(diào)用
public class Client {
public static void main(String[] args) {
Fund fund = new Fund();
fund.buy();
fund.sell();
}
}
4.運(yùn)行結(jié)果
image-20210317095646651.png
外觀模式的使用
何時(shí)使用外觀模式
1.在設(shè)計(jì)初期階段,應(yīng)該有意識(shí)的將不同的兩個(gè)層分離
2.在開發(fā)階段子系統(tǒng)往往是因?yàn)椴粩嗟闹貥?gòu)演化變得越來(lái)越復(fù)雜,增加facade可以提供一個(gè)簡(jiǎn)單的接口,減少他們之間的依賴
3.在維護(hù)一個(gè)遺留的大系統(tǒng)時(shí),可能這個(gè)系統(tǒng)以及非常難以維護(hù)和拓展了,但是因?yàn)樗麄儼浅V匾墓δ?新的需求開發(fā)必須依賴于它;此時(shí)用外觀模式也是非常合適的.可以為新系統(tǒng)開發(fā)一個(gè)外觀facade類,來(lái)提供設(shè)計(jì)粗糙或高度復(fù)雜的遺留代碼的比較清晰簡(jiǎn)單的接口,讓新系統(tǒng)與facade類對(duì)象進(jìn)行交互;facade類與遺留代碼交付所有復(fù)雜的工作
image-20210318111458644.png