iOS 設(shè)計(jì)模式~門面模式 demo

//聯(lián)系人:石虎QQ:1224614774昵稱:嗡嘛呢叭咪哄

一、概念

門面模式也稱為外觀模式。

門面模式提供了一個(gè)統(tǒng)一的接口,用來(lái)訪問(wèn)子系統(tǒng)中的一群接口。外觀定義了一個(gè)高層接口,讓子系統(tǒng)更容易使用。——《Head First設(shè)計(jì)模式》

在各種服務(wù)盡量解耦的情況下,門面模式提供類似聚合層的作用。例如用戶下單,需要調(diào)用訂單服務(wù)下訂單,還要調(diào)用支付服務(wù)進(jìn)行支付,此時(shí)可以用門面接口新建一個(gè)接口,提供下單和支付功能。客戶端只需調(diào)用一個(gè)方法。

二、例子

// 點(diǎn)燈類

public class Light {

//接通開啟

publicvoidturnOn() {

System.out.println("開燈!");

}

//關(guān)掉

publicvoidturnOff() {

System.out.println("關(guān)燈!");

}

}

// 空調(diào)類

public class AirConditioner {

publicvoidturnOn() {

System.out.println("開空調(diào)!");

}

publicvoidturnOff() {

System.out.println("關(guān)空調(diào)!");

}

}

// 熱水器類

public class WaterHeater {

publicvoidturnOn() {

System.out.println("開熱水器!");

}

publicvoidturnOff() {

System.out.println("關(guān)熱水器!");

}

}

/**

需求

這是設(shè)計(jì)了一堆電器類,文章為方便,只給出電燈類,空調(diào)類,熱水器類。

每個(gè)類都有打開和關(guān)閉的方法。

每天回家,你會(huì)打開所有電器,每天出門,你會(huì)關(guān)閉所有電器。

*/

//委托人

public class Client {

publicstaticvoidmain(String[] args) {

Light light = new Light();//光

AirConditioner airConditioner = new AirConditioner();//空調(diào)裝置

WaterHeater waterHeater = new WaterHeater();//熱水器

//接通開啟

System.out.println("回家了!");

light.turnOn();

airConditioner.turnOn();

waterHeater.turnOn();

//關(guān)掉

System.out.println("出門了!");

light.turnOff();

airConditioner.turnOff();

waterHeater.turnOff();

}

}

/**

需求優(yōu)化

加一個(gè)控制中心即可,定義了ControlCenterFacade類

*/

//控制中心外觀

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();

}

//接通開啟

publicvoidturnOn() {

light.turnOn();

airConditioner.turnOn();

waterHeater.turnOn();

}

//關(guān)掉

publicvoidturnOff() {

light.turnOff();

airConditioner.turnOff();

waterHeater.turnOff();

}

}

/**

該類在turnOn方法中調(diào)用了所有電器的打開方法,在turnOff中調(diào)用了所有電器的關(guān)閉方法。

這里的控制中心就是一個(gè)門面,你不用關(guān)系你有多少電器,也不用關(guān)心每個(gè)電器如何開啟關(guān)閉。

你要做的,只是按下控制中心上的打開/關(guān)閉按鈕。

*/

public class ClientV2 {

publicstaticvoidmain(String[] args) {

ControlCenterFacade controlCenterFacade = new ControlCenterFacade();

//接通開啟

System.out.println("回家了!");

controlCenterFacade.turnOn();

//關(guān)掉

System.out.println("出門了!");

controlCenterFacade.turnOff();

}

}

//這就是門面模式

三、總結(jié)

門面模式比較簡(jiǎn)單,甚至稱不上是一個(gè)設(shè)計(jì)模式。

是代碼解耦的反面,提供了聚合層,如果豪宅中增加了新的電器,就需要修改控制中心類了。

方便上層的調(diào)用,使得上層代碼邏輯更清晰。

謝謝!!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,765評(píng)論 18 399
  • 多態(tài) 任何域的訪問(wèn)操作都將有編譯器解析,如果某個(gè)方法是靜態(tài)的,它的行為就不具有多態(tài)性 java默認(rèn)對(duì)象的銷毀順序與...
    yueyue_projects閱讀 986評(píng)論 0 1
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,909評(píng)論 0 2
  • 設(shè)計(jì)模式六大原則 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說(shuō),即一個(gè)類...
    viva158閱讀 783評(píng)論 0 1
  • 近兩年以來(lái),都不敢面對(duì)自己的年紀(jì),一個(gè)準(zhǔn)三十歲的菇?jīng)觯煸谝慌?5后的圈子,我的內(nèi)心是自卑的。我內(nèi)心非常地清楚...
    林山妖霧閱讀 395評(píng)論 0 0