設計模式 伺服器定位設計模式講解

2021-09-02 02:24:04 字數 1049 閱讀 6954

5.設計模式缺點

在專案中有很多這樣的場景:某類classa依賴於服務servicea和服務serviceb:

比如某個presenter類(資料管理類)中需要網路請求獲取資料,也需要從資料庫獲取資料,這個時候,就需要在presenter類中建立網路請求服務類和資料庫請求服務類的例項,然後才能使用服務中的方法。這種場景很普通,也是正常的邏輯,但是這種情況下,存在不少問題:

建立乙個 service locator,其包含各服務的引用,並且封裝了定位服務的邏輯。在類中使用 service locator 來獲取所需服務的例項。

伺服器定位者模式,是一種常用的設計模式,其主要做用是:通過應用強大的抽象層,可對涉及嘗試獲取乙個服務的過程進行封裝。

實際處理請求的服務。對這種服務的引用可以service locator中查詢到。我們建立乙個通用的服務介面iservice,引入實現不同兩種服務service1和service2:

服務定位器模式在帶來解耦和、可維護性、動態公升級服務等好處的同時,也帶來一些不好的方面:

1、由於使用者無法確切知道服務提供者的真實情況,那麼如果出現錯誤,難以定位;

2、集中式、單例的序號產生器是平行計算、系統擴充套件的瓶頸;

3、由於需要整合全域性的服務註冊**,執行單元測試也會麻煩些;

4、序號產生器隱藏了類的依賴關係,使得本來在編譯期可以暴露的問題,在執行時才發生;

設計模式是用來解決某些應用場景下的痛點問題,讓實現的思路更明確清晰,這往往意味著複雜的**邏輯,所以準確的把握好應用場景,選取最適合的設計模式,這才是設計模式的意義所在。

php實現設計模式 之服務定位器模式

什麼是服務定位器 服務定位器 service locator 他知道如何定位 建立或者獲取 乙個應用所需要的服務,服務使用者在實際使用中無需關心服務的實際實現。有什麼作用 實現服務使用者和服務的解耦,無需改變 而只是通過簡單配置更服服務實現。uml圖示 示例 class servicelocator...

KVC設計模式講解

在objective c語言中,可以用 property和 synthesize來建立例項變數的屬性,因此物件訪問的時候可以直接使用點語法。但是,如果不宣告屬性,如何訪問到物件的例項變數呢?kvc就解決了這一問題。kvc 全稱key value coding,也就是鍵值編碼。先看下面乙個例子 int...

PHP設計模式之PHP迭代器模式講解

迭代器有時又稱游標 cursor 是程式設計的軟體設計模式,可在容器物件 container,例如list或vector 上遍訪的介面,設計人員無需關心容器物件的內容。各種語言實作iterator的方式皆不盡同,有些物件導向語言像j a,c python,delphi都已將iterator的特性內建...