Structual設計 Proxy 模式

2021-07-02 21:49:33 字數 1908 閱讀 4555

為其他物件提供一種**以控制對這個物件的訪問。

surrogate

對乙個物件進行訪問控制的乙個願意是為了只有在我們確實需要這個物件時才對他進行建立和初始化。譬如手機上載入,每乙個螢幕的大小是有限定的,我們無需每次把所有都載入上,只有在需要展示的時候才對進行建立和初始化。

在需要用比較通用和複雜的物件指標**簡單的指標的時候,使用proxy。下面是一些可以使用proxy模式常見的情況:

其實每個模式名稱就表明了該模式的作用,**模式就是多乙個**類出來,替原物件進行一些操作,比如我們在租房子的時候回去找中介,為什麼呢?因為你對該地區房屋的資訊掌握的不夠全面,希望找乙個更熟悉的人去幫你做,此處的**就是這個意思。再如我們有的時候展示一些物件,無需例項化非常多的物件,尤其是載入一些非常費記憶體的物件。先來看看關係圖:

其中sourceable為公共介面,source為實際物件操作,建立proxy**類,當client呼叫是時候,只需要與proxy進行互動。

**模式**:

source類

public

class

source

implements

sourceable

}

sourceable類

public

inte***ce sourceable

**proxy類

public

class

proxy

implements

sourceable

@override

public

void

method()

private

void

atfer()

private

void

before()

}

proxy類對source進行了擴充操作,下面是測試類:

public

class proxytest

}

輸出:

before proxy!

the original method!

after proxy!

**模式的應用場景:

如果已有的方法在使用的時候需要對原有的方法進行改進,此時有兩種辦法:

1、修改原有的方法來適應。這樣違反了「對擴充套件開放,對修改關閉」的原則。

2、就是採用乙個**類呼叫原有的方法,且對產生的結果進行控制。這種方法就是**模式。

使用**模式,可以將功能劃分的更加清晰,有助於後期維護,這裡沒有舉例載入手機(虛代表)左右,但是是很關鍵的!

adapter模式:介面卡adapter為它所適配的物件提供了乙個不同的介面。相反,**提供與它的實體相同的介面。然而,用於訪問保護的**可能會拒絕執行實體會執行的操作。因此,它的介面實際上可能只是實體介面的乙個子集。

decorator模式:儘管decorator的實現部分與**相似,但decorator的目的不一樣。decorator為物件新增乙個或多個功能,而**則控制對物件的訪問。

**的實現與decorator實現類似,但是在相似的程度上有所區別。protection proxy的實現可能與decorator的實現差不多。另一方面,remote proxy不包含對實體的直接引用,而只是乙個間接引用,如「主機:id,主機上的區域性位址」。virtual proxy開始的時候使用乙個間接引用,例如乙個檔名。但最終將獲取並使用乙個直接引用。

引用:

Structual設計 Facade模式

為子系統中的一組介面提供乙個一致的介面,facade模式定義了乙個高層的介面,這個介面使得這一子系統更加容易使用。無將乙個系統劃成為若干個子系統有利於降低系統的複雜性。乙個常見的設計目標是使子系統間的通訊和相互依賴關係達到最小。達到該目標的途徑之一是引入乙個外觀 facade 物件,它為子系統中較一...

zabbix agent主動模式和proxy

一 zabbix 模式,緩解服務端壓力 zabbix proxy.conf配置如下 more zabbix proxy.conf grep v grep v server zabbix服務端ip serverport zabbix服務端埠 hostname fz zabbix proxy此處名稱需要...

方法呼叫unknown 鏈式呼叫與proxy

鏈式呼叫雖然快樂,可每個方法後面的return this略顯繁瑣與醜陋,括號與引號也未免太多。例如下面這個簡單的logger new logger addlabel warn l4 登入 遊客 error addcontent 失敗 addcontent 密碼不對 end 你可能已經對這樣的封裝習以...