css外墙法_外墙设计模式示例
css外墻法
本文是我們名為“ Java設計模式 ”的學院課程的一部分。
在本課程中,您將深入研究大量的設計模式,并了解如何在Java中實現和利用它們。 您將了解模式如此重要的原因,并了解何時以及如何應用模式中的每一個。 在這里查看 !
目錄
1.簡介 2.什么是立面模式 3.解決問題 4.使用外觀模式 5.下載源代碼1.簡介
在本課程中,我們將討論另一種結構模式,即立面模式。 但是在深入研究它的細節之前,讓我們討論一個將通過此特定模式解決的問題。
您的公司是一家基于產品的公司,并且已在市場上推出了名為Schedule Server的產品。 它本身是一種服務器,用于管理作業。 這些工作可以是任何類型的工作,例如發送電子郵件列表,短信,從目標位置讀取或寫入文件,或者只是將文件從源位置傳輸到目標位置。 開發人員可以使用該產品來管理此類工作,并能夠將更多精力集中于他們的業務目標。 服務器在指定的時間執行每個作業,并且還單獨管理所有下劃線問題,例如并發問題和安全性。 作為開發人員,只需要編碼相關的業務需求,并提供了大量的API調用即可根據他們的需求安排工作。
一切都進行得很好,直到客戶端開始抱怨啟動和停止服務器進程。 他們說,盡管服務器運行良好,但是初始化和關閉過程卻非常復雜,他們希望有一種簡便的方法來做到這一點。 服務器向客戶端公開了一個復雜的接口,這些接口看上去對他們來說有些忙。
我們需要提供一種啟動和停止服務器的簡便方法。
與客戶端的復雜接口已經被認為是當前系統設計中的故障。 但是幸運的是,我們無法從頭開始設計和編碼。 我們需要一種解決此問題并使界面易于訪問的方法。
外觀模式可以幫助我們解決此設計問題。 但是在此之前,讓我們了解一下外觀模式。
2.什么是立面模式
Facade模式使用Facade類使復雜的界面易于使用。 外觀模式為子系統中的一組接口提供了統一的接口。 Facade定義了一個更高級別的界面,使子系統更易于使用。
Facade統一了子系統的復雜底層接口,以便提供一種訪問該接口的簡單方法。 它只是為子系統的復雜接口提供了一層,使其更易于使用。
Facade不封裝子系統類或接口; 它只是為其功能提供了簡化的界面。 客戶端可以直接訪問這些類。 它仍然為可能需要它的客戶提供系統的全部功能。
Facade不僅能夠簡化界面,而且還可以使客戶端與子系統分離。 它遵循最小知識原則,該原則避免了客戶端與子系統之間的緊密耦合。 這提供了靈活性:假設在上述問題中,公司希望添加更多具有相同接口的步驟來啟動或停止Schedule Server。 如果您將客戶端代碼編碼到Facade而不是子系統上,則無需更改客戶端代碼,只需更改Facade,它將隨新版本一起提供給客戶端。
客戶端通過向Facade發送請求來與子系統進行通信,該請求會將其轉發到適當的子系統對象。 盡管子系統對象執行實際工作,但是外觀可能必須完成其自身的工作才能將其接口轉換為子系統接口。 使用外觀的客戶端不必直接訪問其子系統對象。
請注意, 與適配器相同的Facade可以包裝多個類,但是將Facade用于接口可簡化復雜接口的使用,而適配器可用于將接口轉換為客戶端期望的接口。
圖1
3.解決問題
客戶端在使用Schedule Server時面臨的問題是服務器啟動和停止其服務所帶來的復雜性。 客戶想要一種簡單的方法。 以下是客戶端啟動和停止服務器所需編寫的代碼。
ScheduleServer scheduleServer = new ScheduleServer();要啟動服務器,客戶端需要創建ScheduleServer類的對象,然后需要按順序調用以下方法來啟動和初始化服務器。
scheduleServer.startBooting(); scheduleServer.readSystemConfigFile(); scheduleServer.init(); scheduleServer.initializeContext(); scheduleServer.initializeListeners(); scheduleServer.createSystemObjects();System.out.println("Start working......"); System.out.println("After work done.........");要停止服務器,客戶端需要以相同的順序調用以下方法。
scheduleServer.releaseProcesses(); scheduleServer.destory(); scheduleServer.destroySystemObjects(); scheduleServer.destoryListeners(); scheduleServer.destoryContext(); scheduleServer.shutdown();這對他們來說似乎是一個負擔,他們對做所有這些事情都不感興趣,為什么要這么做? 即使對于一些可能對系統的低級界面感興趣的客戶來說,這看起來很有趣,但他們中的大多數人都不喜歡它。
為了解決這個問題,我們將創建一個將包裝服務器對象的Facade類。 此類將為客戶端提供簡單的接口(方法)。 這些接口在內部將調用服務器對象上的方法。 首先讓我們看一下代碼,然后再討論它。
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對象,它通過其構造函數實例化服務器對象,并具有兩個簡單方法: startServer()和stopServer() 。 這些方法在內部執行服務器的啟動和停止。 客戶端只需要調用這些簡單的方法即可。 現在,無需調用所有生命周期和銷毀方法,只需簡單的方法和其余過程將由facade類執行。
下面的代碼顯示了Facade如何使復雜的界面易于使用。
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();}}另外,請注意,盡管Facade類為復雜的子系統提供了一個簡單的接口,但它沒有封裝子系統。 客戶端仍然可以訪問子系統的低級接口。 因此,外觀提供了一個額外的層,即到復雜子系統的簡單接口,但是它并未完全隱藏對復雜子系統的低層接口的直接訪問。
4.使用外觀模式
在以下情況下使用外觀模式:
5.下載源代碼
這是有關立面模式的課程。 您可以在此處下載源代碼: FacadePattern-Project
翻譯自: https://www.javacodegeeks.com/2015/09/facade-design-pattern.html
css外墻法
總結
以上是生活随笔為你收集整理的css外墙法_外墙设计模式示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 量子纠缠从“幽灵”到自然法则的漫长旅程
- 下一篇: 芒康海拔多少米 西藏芒康海拔