日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

外墙设计模式示例

發布時間:2023/12/3 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外墙设计模式示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是我們名為“ 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();

這對他們來說似乎是一個負擔,他們對做所有這些事情都不感興趣,為什么要這么做? 即使對于一些可能對系統的低級界面感興趣的客戶來說,這看起來很有趣,但大多數人都不喜歡它。

為了解決這個問題,我們將創建一個外觀類,該類將包裝服務器對象。 此類將為客戶端提供簡單的接口(方法)。 這些接口在內部將調用服務器對象上的方法。 首先讓我們看一下代碼,然后再討論它。

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

    總結

    以上是生活随笔為你收集整理的外墙设计模式示例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。