//聯(lián)系人:石虎QQ:1224614774昵稱(chēng):嗡嘛呢叭咪哄
一盟萨、概念
門(mén)面模式也稱(chēng)為外觀模式弯屈。
門(mén)面模式提供了一個(gè)統(tǒng)一的接口睡毒,用來(lái)訪問(wèn)子系統(tǒng)中的一群接口谱秽。外觀定義了一個(gè)高層接口生巡,讓子系統(tǒng)更容易使用耙蔑。——《Head First設(shè)計(jì)模式》
在各種服務(wù)盡量解耦的情況下孤荣,門(mén)面模式提供類(lèi)似聚合層的作用纵潦。例如用戶下單,需要調(diào)用訂單服務(wù)下訂單垃环,還要調(diào)用支付服務(wù)進(jìn)行支付邀层,此時(shí)可以用門(mén)面接口新建一個(gè)接口,提供下單和支付功能遂庄×仍海客戶端只需調(diào)用一個(gè)方法。
二涛目、例子
// 點(diǎn)燈類(lèi)
public class Light {
//接通開(kāi)啟
publicvoidturnOn() {
System.out.println("開(kāi)燈!");
}
//關(guān)掉
publicvoidturnOff() {
System.out.println("關(guān)燈!");
}
}
// 空調(diào)類(lèi)
public class AirConditioner {
publicvoidturnOn() {
System.out.println("開(kāi)空調(diào)!");
}
publicvoidturnOff() {
System.out.println("關(guān)空調(diào)!");
}
}
// 熱水器類(lèi)
public class WaterHeater {
publicvoidturnOn() {
System.out.println("開(kāi)熱水器!");
}
publicvoidturnOff() {
System.out.println("關(guān)熱水器!");
}
}
/**
需求
這是設(shè)計(jì)了一堆電器類(lèi)秸谢,文章為方便凛澎,只給出電燈類(lèi),空調(diào)類(lèi)估蹄,熱水器類(lèi)塑煎。
每個(gè)類(lèi)都有打開(kāi)和關(guān)閉的方法。
每天回家臭蚁,你會(huì)打開(kāi)所有電器最铁,每天出門(mén),你會(huì)關(guān)閉所有電器垮兑。
*/
//委托人
public class Client {
publicstaticvoidmain(String[] args) {
Light light = new Light();//光
AirConditioner airConditioner = new AirConditioner();//空調(diào)裝置
WaterHeater waterHeater = new WaterHeater();//熱水器
//接通開(kāi)啟
System.out.println("回家了!");
light.turnOn();
airConditioner.turnOn();
waterHeater.turnOn();
//關(guān)掉
System.out.println("出門(mén)了!");
light.turnOff();
airConditioner.turnOff();
waterHeater.turnOff();
}
}
/**
需求優(yōu)化
加一個(gè)控制中心即可冷尉,定義了ControlCenterFacade類(lèi)
*/
//控制中心外觀
public class ControlCenterFacade {
//私人的
private Light light;//光
private AirConditioner airConditioner;//空調(diào)裝置
private WaterHeater waterHeater;//熱水器
public ControlCenterFacade() {
this.light = new Light();
this.airConditioner = new AirConditioner();
this.waterHeater = new WaterHeater();
}
//接通開(kāi)啟
publicvoidturnOn() {
light.turnOn();
airConditioner.turnOn();
waterHeater.turnOn();
}
//關(guān)掉
publicvoidturnOff() {
light.turnOff();
airConditioner.turnOff();
waterHeater.turnOff();
}
}
/**
該類(lèi)在turnOn方法中調(diào)用了所有電器的打開(kāi)方法,在turnOff中調(diào)用了所有電器的關(guān)閉方法系枪。
這里的控制中心就是一個(gè)門(mén)面雀哨,你不用關(guān)系你有多少電器,也不用關(guān)心每個(gè)電器如何開(kāi)啟關(guān)閉私爷。
你要做的雾棺,只是按下控制中心上的打開(kāi)/關(guān)閉按鈕。
*/
public class ClientV2 {
publicstaticvoidmain(String[] args) {
ControlCenterFacade controlCenterFacade = new ControlCenterFacade();
//接通開(kāi)啟
System.out.println("回家了!");
controlCenterFacade.turnOn();
//關(guān)掉
System.out.println("出門(mén)了!");
controlCenterFacade.turnOff();
}
}
//這就是門(mén)面模式
三衬浑、總結(jié)
門(mén)面模式比較簡(jiǎn)單捌浩,甚至稱(chēng)不上是一個(gè)設(shè)計(jì)模式。
是代碼解耦的反面嚎卫,提供了聚合層嘉栓,如果豪宅中增加了新的電器宏榕,就需要修改控制中心類(lèi)了拓诸。
方便上層的調(diào)用,使得上層代碼邏輯更清晰麻昼。