作者:某人_Valar
如需轉(zhuǎn)載請(qǐng)保留原文鏈接;
設(shè)計(jì)模式的3大類(lèi):
- 創(chuàng)建型模式(5種)建造者模式,單例模式,工廠(chǎng)方法模式,抽象工廠(chǎng)模式,原型模式。
- 結(jié)構(gòu)性模式(7種)適配器模式,裝飾模式,代理模式,外觀(guān)模式,橋接模式,組合模式,享元模式。
- 行為型模式(11種)策略模式,模板方法模式,觀(guān)察者模式,迭代器模式,責(zé)任鏈模式,命令模式,備忘錄模式,狀態(tài)模式,訪(fǎng)問(wèn)者模式,中介者模式,解釋器模式。
1. 什么是外觀(guān)模式
外觀(guān)模式隱藏了系統(tǒng)的復(fù)雜性,并向客戶(hù)端提供了一個(gè)客戶(hù)端可以訪(fǎng)問(wèn)系統(tǒng)的接口。
一般在外觀(guān)模式中有下面幾個(gè)角色:
- Facade:外觀(guān)類(lèi),知道哪些子系統(tǒng)負(fù)責(zé)處理請(qǐng)求,將客戶(hù)端的請(qǐng)求代理給適當(dāng)?shù)淖酉到y(tǒng)對(duì)象。
- Subsystem:子系統(tǒng)類(lèi),可以有一個(gè)或者多個(gè)子系統(tǒng)。實(shí)現(xiàn)子系統(tǒng)的功能,處理外觀(guān)類(lèi)指派的任務(wù),注意子系統(tǒng)類(lèi)不含有外觀(guān)類(lèi)的引用。
2. 外觀(guān)模式的簡(jiǎn)單實(shí)現(xiàn)
(1)子系統(tǒng)類(lèi)
//子系統(tǒng)招式
public class Zhaoshi {
public void TaiJiQuan(){
System.out.println("使用招式太極拳");
}
public void QiShangQuan(){
System.out.println("使用招式七傷拳");
}
public void ShengHuo(){
System.out.println("使用招式圣火令");
}
}
//子系統(tǒng)內(nèi)功
public class NeiGong {
public void JiuYang(){
System.out.println("使用九陽(yáng)神功");
}
public void QianKun(){
System.out.println("使用乾坤大挪移");
}
}
//子系統(tǒng)經(jīng)脈
public class JingMai {
public void jingmai(){
System.out.println("開(kāi)啟經(jīng)脈");
}
}
(2)外觀(guān)類(lèi)
初始化外觀(guān)類(lèi)的同時(shí)將各個(gè)子系統(tǒng)類(lèi)創(chuàng)建好,并進(jìn)行搭配。
//外觀(guān)類(lèi)張無(wú)忌
public class ZhangWuJi {
private JingMai jingMai;
private Zhaoshi zhaoshi;
private NeiGong neiGong;
public ZhangWuJi() {
jingMai = new JingMai();
zhaoshi = new Zhaoshi();
neiGong = new NeiGong();
}
/**
* 使用乾坤大挪移
*/
public void Qiankun(){
jingMai.jingmai();// 開(kāi)啟經(jīng)脈
neiGong.QianKun(); //使用內(nèi)功乾坤大挪移
}
/**
* 使用七傷拳
*/
public void Qishang(){
jingMai.jingmai();// 開(kāi)啟經(jīng)脈
neiGong.JiuYang(); //使用內(nèi)功九陽(yáng)神功
zhaoshi.QiShangQuan(); // 使用招式七傷拳
}
}
(3)測(cè)試類(lèi)
客戶(hù)端調(diào)用
public class Test {
public static void main(String[] args){
ZhangWuJi zhangWuJi = new ZhangWuJi();
//張無(wú)忌使用乾坤大挪移
zhangWuJi.Qiankun();
//張無(wú)忌使用七傷拳
zhangWuJi.Qishang();
}
}
運(yùn)行結(jié)果:

image.png
3. 外觀(guān)模式優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 1、減少系統(tǒng)相互依賴(lài)。 2、提高靈活性。 3、提高了安全性。
缺點(diǎn):不符合開(kāi)閉原則,如果要改東西很麻煩,繼承重寫(xiě)都不合適。
4.外觀(guān)模式與裝飾模式的區(qū)別
裝飾模式:封裝一個(gè)對(duì)象,并提供額外的行為,用組合的方式來(lái)替代繼承以擴(kuò)展類(lèi)的功能。
外觀(guān)模式:封裝許多對(duì)象,簡(jiǎn)化它們的接口,定義了一個(gè)更高層的接口,使得子系統(tǒng)更容易被調(diào)用。
參考:
《Android進(jìn)階之光》
外觀(guān)模式-菜鳥(niǎo)教程