1.外觀模式(Facade Pattern)
外觀模式 隱藏系統(tǒng)的復(fù)雜性涝桅,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式原在,它向現(xiàn)有的系統(tǒng)添加一個接口那先,來隱藏系統(tǒng)的復(fù)雜性。
2.代碼實現(xiàn)
場景:顧客在寄郵件時抄腔,只用關(guān)心郵件的內(nèi)容和地址瓢湃,不用去關(guān)心復(fù)雜的郵寄過程。
- 寄郵件過程接口(LetterProcess)
public interface LetterProcess {
/**
* 顧客寫信
* @param context
*/
void write(String context);
/**
* 顧客填寫郵寄地址
* @param address
*/
void envelope(String address);
/**
* 郵局進行郵件分類
*/
void postoffice();
/**
* 郵局通過汽車送郵件
*/
void sendMail();
}
- 實現(xiàn)寄件接口
public class SendMaiPersonl implements LetterProcess {
@Override
public void write(String context) {
System.out.println("郵件內(nèi)容:"+context);
}
@Override
public void envelope(String address) {
System.out.println("郵件地址:"+address);
}
@Override
public void postoffice() {
System.out.println("郵局通過省區(qū)分類郵件");
}
@Override
public void sendMail() {
System.out.println("郵局通過汽車派送郵件");
}
}
- 外觀模式(Appearance)
public class Appearance {
private LetterProcess sendMaiPersonl = new SendMaiPersonl();
public void sendLetter(String context,String address){
this.sendMaiPersonl.write(context);
this.sendMaiPersonl.envelope(address);
this.sendMaiPersonl.postoffice();
this.sendMaiPersonl.sendMail();
}
}
- 顧客(Client)
public class Client {
public static void main(String[] args) {
Appearance appearance = new Appearance();
appearance.sendLetter("愿你被這世界溫柔以待,即使生命總以刻薄荒蕪相欺","遠方的朋友");
}
}
-
運行結(jié)果:
- 優(yōu)點
1赫蛇、減少系統(tǒng)相互依賴绵患。
2、提高靈活性悟耘。
3落蝙、提高了安全性。- 缺點:
不符合開閉原則暂幼,如果要改東西很麻煩筏勒,繼承重寫都不合適。- 使用場景:
1旺嬉、為復(fù)雜的模塊或子系統(tǒng)提供外界訪問的模塊管行。
2、子系統(tǒng)相對獨立邪媳。
3捐顷、預(yù)防低水平人員帶來的風(fēng)險。
(總結(jié)參考:菜鳥教程)
當(dāng)前文集 :Java設(shè)計模式
代碼:GitHub