外墙设计模式示例
本文是我們名為“ Java設(shè)計(jì)模式 ”的學(xué)院課程的一部分。
在本課程中,您將深入研究大量的設(shè)計(jì)模式,并了解如何在Java中實(shí)現(xiàn)和利用它們。 您將了解模式如此重要的原因,并了解何時(shí)以及如何應(yīng)用模式中的每一個(gè)。 在這里查看 !
目錄
1.簡(jiǎn)介 2.什么是立面模式 3.解決問題 4.使用外觀模式 5.下載源代碼1.簡(jiǎn)介
在本課程中,我們將討論另一種結(jié)構(gòu)模式,即立面模式。 但是在深入研究它的細(xì)節(jié)之前,讓我們討論一個(gè)將通過此特定模式解決的問題。
您的公司是一家基于產(chǎn)品的公司,它已經(jīng)在市場(chǎng)上推出了名為Schedule Server的產(chǎn)品。 它本身就是一種服務(wù)器,用于管理作業(yè)。 這些工作可以是任何類型的工作,例如發(fā)送電子郵件列表,短信,從目標(biāo)位置讀取或?qū)懭胛募?#xff0c;或者只是將文件從源位置傳輸?shù)侥繕?biāo)位置。 開發(fā)人員可以使用該產(chǎn)品來管理此類工作,并能夠?qū)⒏嗑杏谒麄兊臉I(yè)務(wù)目標(biāo)。 服務(wù)器在指定的時(shí)間執(zhí)行每個(gè)作業(yè),并且還單獨(dú)管理所有下劃線問題,例如并發(fā)問題和安全性。 作為開發(fā)人員,只需要編碼相關(guān)的業(yè)務(wù)需求,并提供了大量的API調(diào)用即可根據(jù)他們的需求安排工作。
一切正常,直到客戶端開始抱怨啟動(dòng)和停止服務(wù)器進(jìn)程。 他們說,盡管服務(wù)器運(yùn)行良好,但是初始化和關(guān)閉過程卻非常復(fù)雜,他們希望有一種簡(jiǎn)便的方法來做到這一點(diǎn)。 服務(wù)器向客戶端公開了一個(gè)復(fù)雜的接口,這些接口看起來對(duì)他們來說有些忙。
我們需要提供一種啟動(dòng)和停止服務(wù)器的簡(jiǎn)便方法。
與客戶端的復(fù)雜接口已被視為當(dāng)前系統(tǒng)設(shè)計(jì)中的故障。 但是幸運(yùn)的是,我們不能從頭開始設(shè)計(jì)和編碼。 我們需要一種解決此問題并使界面易于訪問的方法。
外觀模式可以幫助我們解決此設(shè)計(jì)問題。 但是在此之前,讓我們先了解一下外觀模式。
2.什么是立面模式
Facade模式使用Facade類使復(fù)雜的界面易于使用。 外觀模式為子系統(tǒng)中的一組接口提供了統(tǒng)一的接口。 Facade定義了一個(gè)更高級(jí)別的界面,使子系統(tǒng)更易于使用。
Facade統(tǒng)一了子系統(tǒng)的復(fù)雜底層接口,以便提供一種訪問該接口的簡(jiǎn)單方法。 它只是為子系統(tǒng)的復(fù)雜接口提供了一層,使其更易于使用。
Facade不封裝子系統(tǒng)類或接口; 它只是為其功能提供了簡(jiǎn)化的界面。 客戶端可以直接訪問這些類。 它仍然為可能需要它的客戶提供系統(tǒng)的全部功能。
Facade不僅能夠簡(jiǎn)化界面,而且還可以使客戶端與子系統(tǒng)分離。 它遵循“最少知識(shí)原則”,可避免客戶端與子系統(tǒng)之間的緊密耦合。 這提供了靈活性:假設(shè)在上述問題中,公司希望添加更多其他步驟來啟動(dòng)或停止Schedule Server,這些步驟具有各自不同的接口。 如果您將客戶端代碼編碼到Facade而不是子系統(tǒng)上,則無需更改客戶端代碼,只需更改Facade,它將隨新版本一起提供給客戶端。
客戶端通過向Facade發(fā)送請(qǐng)求來與子系統(tǒng)進(jìn)行通信,該請(qǐng)求會(huì)將其轉(zhuǎn)發(fā)到適當(dāng)?shù)淖酉到y(tǒng)對(duì)象。 盡管子系統(tǒng)對(duì)象執(zhí)行實(shí)際工作,但是外觀可能必須完成其自身的工作才能將其接口轉(zhuǎn)換為子系統(tǒng)接口。 使用外觀的客戶端不必直接訪問其子系統(tǒng)對(duì)象。
請(qǐng)注意, 與適配器相同的Facade可以包裝多個(gè)類,但是將Facade用于接口可簡(jiǎn)化復(fù)雜接口的使用,而適配器可用于將接口轉(zhuǎn)換為客戶端期望的接口。
圖1
3.解決問題
客戶端在使用Schedule Server時(shí)面臨的問題是服務(wù)器啟動(dòng)和停止其服務(wù)所帶來的復(fù)雜性。 客戶想要一種簡(jiǎn)單的方法。 以下是客戶端啟動(dòng)和停止服務(wù)器所需編寫的代碼。
ScheduleServer scheduleServer = new ScheduleServer();要啟動(dòng)服務(wù)器,客戶端需要?jiǎng)?chuàng)建ScheduleServer類的對(duì)象,然后需要按順序調(diào)用以下方法來啟動(dòng)和初始化服務(wù)器。
scheduleServer.startBooting(); scheduleServer.readSystemConfigFile(); scheduleServer.init(); scheduleServer.initializeContext(); scheduleServer.initializeListeners(); scheduleServer.createSystemObjects();System.out.println("Start working......"); System.out.println("After work done.........");要停止服務(wù)器,客戶端需要以相同的順序調(diào)用以下方法。
scheduleServer.releaseProcesses(); scheduleServer.destory(); scheduleServer.destroySystemObjects(); scheduleServer.destoryListeners(); scheduleServer.destoryContext(); scheduleServer.shutdown();這對(duì)他們來說似乎是一個(gè)負(fù)擔(dān),他們對(duì)做所有這些事情都不感興趣,為什么要這么做? 即使對(duì)于一些可能對(duì)系統(tǒng)的低級(jí)界面感興趣的客戶來說,這看起來很有趣,但大多數(shù)人都不喜歡它。
為了解決這個(gè)問題,我們將創(chuàng)建一個(gè)外觀類,該類將包裝服務(wù)器對(duì)象。 此類將為客戶端提供簡(jiǎn)單的接口(方法)。 這些接口在內(nèi)部將調(diào)用服務(wù)器對(duì)象上的方法。 首先讓我們看一下代碼,然后再討論它。
package com.javacodegeeks.patterns.facadepattern;public class ScheduleServerFacade {private final ScheduleServer scheduleServer;public ScheduleServerFacade(ScheduleServer scheduleServer){this.scheduleServer = scheduleServer;}public void startServer(){scheduleServer.startBooting();scheduleServer.readSystemConfigFile();scheduleServer.init();scheduleServer.initializeContext();scheduleServer.initializeListeners();scheduleServer.createSystemObjects();}public void stopServer(){scheduleServer.releaseProcesses();scheduleServer.destory();scheduleServer.destroySystemObjects();scheduleServer.destoryListeners();scheduleServer.destoryContext();scheduleServer.shutdown();}}上面的ScheduleServerFacade類是Facade類,它包裝ScheduleServer對(duì)象,它通過其構(gòu)造函數(shù)實(shí)例化服務(wù)器對(duì)象,并具有兩個(gè)簡(jiǎn)單方法: startServer()和stopServer() 。 這些方法在內(nèi)部執(zhí)行服務(wù)器的啟動(dòng)和停止。 客戶端只需要調(diào)用這些簡(jiǎn)單的方法即可。 現(xiàn)在,無需調(diào)用所有生命周期和銷毀方法,只需簡(jiǎn)單的方法和其余過程將由facade類執(zhí)行。
下面的代碼顯示了Facade如何使復(fù)雜的界面易于使用。
package com.javacodegeeks.patterns.facadepattern;public class TestFacade {public static void main(String[] args) {ScheduleServer scheduleServer = new ScheduleServer();ScheduleServerFacade facadeServer = new ScheduleServerFacade(scheduleServer);facadeServer.startServer();System.out.println("Start working......");System.out.println("After work done.........");facadeServer.stopServer();}}另外,請(qǐng)注意,盡管Facade類為復(fù)雜的子系統(tǒng)提供了一個(gè)簡(jiǎn)單的接口,但它沒有封裝子系統(tǒng)。 客戶端仍然可以訪問子系統(tǒng)的低級(jí)接口。 因此,外觀提供了一個(gè)額外的層,即到復(fù)雜子系統(tǒng)的簡(jiǎn)單接口,但是它并未完全隱藏對(duì)復(fù)雜子系統(tǒng)的低層接口的直接訪問。
4.使用外觀模式
在以下情況下使用外觀模式:
5.下載源代碼
這是有關(guān)立面模式的課程。 您可以在此處下載源代碼: FacadePattern-Project
翻譯自: https://www.javacodegeeks.com/2015/09/facade-design-pattern.html
總結(jié)
- 上一篇: 预防服务器ddos攻击(预防服务器ddo
- 下一篇: 物种起源安卓版(物种起源安卓)