1. 程式人生 > >Proxy(代理)模式

Proxy(代理)模式

  代理模式結構型的設計模式之一(所謂結構型設計模式指的是類和類之間組合形成更大的結構),它可以為其它被代理物件提供一種代理以控制對被代理物件的訪問。代理物件和被代理的物件具有相同的介面(它們繼承自同一個抽象類),使用者程式碼通過代理物件來與被代理的目標互動,代理物件一般會在互動過程中可以進行某些屬於代理物件的操作。

案例: 針對賣衣服這種商業買賣,可以在實體店銷售,也可以授權於網上商店,也就是說網上商店可以代理實體店的銷售,網上商店可以增加自身的操作,如雙十一打折。

  UML圖如下:
這裡寫圖片描述
  代理模式適用於其它物件提供一種代理以控制對本物件的訪問,它由如下角色組成:
  (1)SellClothing(賣衣服,抽象主體角色)
  被代理類與代理類的共同介面。
  (2)PhysicalStore(實體店,被代理的角色)
  定義了被代理的類。
  (3)NetStore(網上商店,代理角色)
  定義了代理的類,成員中有被代理類的引用(指標),代理角色通常在使用者程式碼呼叫被代理物件的操作之前或之後執行某些自身的操作。
  需要注意,被代理類和代理類都繼承自基類,這就意味著它們具有共同的介面。這樣設計是十分合理的,假設不繼承自同一個基類,那麼沒有任何關係的兩個類也可以互相代理了,從業務邏輯上來講肯定不符合實際,如賣衣服的實體店總不能讓賣手機的網上商店代理吧。

class SellClothing
{
public:
    virtual void sell() = 0;    //賣衣服操作
    virtual ~SellClothing() {}
};

class PhysicalStore : public SellClothing
{
public:
    void sell() { std::cout << "Sell clothing" << std::endl; }
};

class NetStore : public SellClothing
{
public:
    void sell() //代理類的賣操作
{ SellClothing* psrc = new PhysicalStore; psrc->sell(); //執行被代理類的賣操作 sale_1111(); //執行自身的打折活動操作 } void sale_1111() { std::cout << "sale for 1111" << std::endl; } ~NetStore() { delete m_SellClothing; } private: SellClothing* m_SellClothing; }; int
main(void) { SellClothing *p1 = new PhysicalStore; p1->sell(); delete p1; std::cout <<"-----------------" << std::endl; SellClothing *p2 = new NetStore; p2->sell(); delete p2; return 0; }

  編譯執行:
這裡寫圖片描述

相關推薦

Java設計模式(八)Proxy代理模式

com 服務器 exp 技術分享 如果 face pub [] his 一、場景描述 代理在生活中並不少見,租房子需要找中介,打官司需要找律師,很多事情我們需要找專業人士代理我們做,另一方面,中介和律師也代理了房東、法律程序與我們打交道。 當然,設計模式中的代理與廣義的

設計模式——proxy代理模式

關系 org 類對象 設置 驗證 protect java實現 否則 總結 [toc] 概述 定義 代理模式顧名思義,作為某對象的代表,去做某些事情。例如海淘、轉運公司,代收快遞等,都是生活中的代理模式。 代理模式的英文叫做Proxy或Surrogate。 定義:代理(P

Java 設計---Proxy 代理模式

何謂代理模式        代理模式是指客戶端不直接呼叫服務物件,而是通過代理服務去呼叫物件。 應用場景          1.當需要為一個物件在不同的地址空間提供區域性的代表時;此時的代理模式

C++設計模式-Proxy代理模式

Proxy代理模式 作用:為其他物件提供一種代理以控制對這個物件的訪問。 代理的種類: 如果按照使用目的來劃分,代理有以下幾種: 遠端(Remote)代理:為一個位於不同的地址空間的物件提供一個局域代表物件。這個不同的地址空間可以是在本機器中,也可是在另一臺機器中。遠端代理又叫做大使(Ambassador)。

Proxy(代理)模式

  代理模式是結構型的設計模式之一(所謂結構型設計模式指的是類和類之間組合形成更大的結構),它可以為其它被代理物件提供一種代理以控制對被代理物件的訪問。代理物件和被代理的物件具有相同的介面(它們繼承自同

Proxy代理模式之應用

一,定義:代理模式(Proxy):為其他物件提供一種代理以控制對這個物件的訪問。 二,其類圖: 三,分類一:靜態代理                  1,介紹:也就是需要我們為目標物件編寫一個代理物件,在編譯期就生成了這個代理物件,然後通過訪問這個代理,來實現目

優雅的表單驗證模式--策略設計模式和ES6的Proxy代理模式

轉載自 作者 @jawil 原文,原文有刪改 網站的互動,離不開表單的提交,而一個健壯的表單離不開對錶單內容的校驗。 假設我們正在編寫一個註冊的頁面,在點選註冊按鈕之前,有如下幾條校驗邏輯。 所有選項不能為空 使用者名稱長度不能少於6位

淺談proxy代理模式

一、前言 代理是代替伺服器去接受請求者的請求的中間人。我們也聽說過代理伺服器,它的作用的幫助客戶端去請求客戶端想要的資源,為什麼

代理模式-Proxy

遠程 對象的訪問 功能 size 增加 pro 訪問 作用 16px 代理模式:為其他對象提供一種代理以控制這個對象的訪問。   代理對象起到的作用,可以去掉功能服務或增加額外的服務。 常見代理模式:   遠程代理、虛擬代理、保護代理、智能引用代理 靜態代理概念和實現方法方

代理模式Proxy

p s log 場景 private span 方法 陌生 機制 特殊 代理模式(Proxy) 代理模式:簡單明了。簡稱代理商,對代理這個詞想必大家都不陌生,現在微信上,幾乎全是各種代理商,哈哈哈。。。不錯。我們的代理模式,也是如此。用java語言來說。就是,替原對象進行一

【java項目實戰】代理模式Proxy Pattern),靜態代理 VS 動態代理

自己 text 好的 trace use 代理 分類 plproxy this 這篇博文,我們主要以類圖和代碼的形式來對照學習一下靜態代理和動態代理。重點解析各自的優缺點。 定義 代理模式(Proxy Pattern)是對象的結構型模式,代理模

設計模式之 - 代理模式Proxy Pattern)

ride proxy idt object catch 實例化 圖片 null 人在 代理模式:代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責為委托類預處理消息,過濾消息並轉發消息,以及進行消息被委托類執行後的後續處理。很多可以

設計模式學習——代理模式Proxy Pattern)

pre .cn mar str ubuntu 技術 運行 obj proxy 放假啦~學生們要買車票回家了,有汽車票、火車票,等。但是,車站很遠,又要考試,怎麽辦呢?找代理買啊,雖然要多花點錢,但是,說不定在搞活動,有折扣呢~ 1 /// 2 /// @fi

設計模式學習——代理模式Proxy Pattern)之 強制代理(強校驗,防繞過)

arr cnblogs 其他 測試 auth using color ref use 上周溫習了代理模式:http://www.cnblogs.com/chinxi/p/7354779.html 在此進行拓展,學習強制代理。但是發現網上大多例子都有個“天坑”(我是這麽認為的

設計模式代理模式 Proxy

net rac style and static his public 分享 con 定義與模型 ‘ 應用場景和分類 代碼實現 staticProxy 靜態代理 public interface Star { /** * 面談

C#設計模式之十二代理模式Proxy Pattern)【結構型】

ride col 安全 .html 使用權 防火墻 一對多 tro 橋接 原文:C#設計模式之十二代理模式(Proxy Pattern)【結構型】一、引言 今天我們要講【結構型】設計模式的第七個模式,也是“結構型”設計模式中的最後一個模式,該模式是【代理模式】,英文名稱

【編程思想】【設計模式】【結構模式Structural】代理模式Proxy

bsp face 分享 odi abi from sel code utf Python版 https://github.com/faif/python-patterns/blob/master/structural/proxy.py #!/usr/bin/env

虛擬代理模式-Virtual Proxy(Java實現)

brush ola 跳轉 true invite ace 實現 tile 缺點 虛擬代理模式-Virtual Proxy 虛擬代理模式(Virtual PRoxy)會推遲真正所需對象實例化時間. 在需要真正的對象工作之前, 如果代理對象能夠處理, 那麽暫時不需要真正對象來

代理模式-JDK Proxy(Java實現)

CA reflect RR static warnings ade 場景 instance 代理模式 代理模式-JDK Proxy 使用JDK支持的代理模式, 動態代理 場景如下: 本文例子代理了ArrayList, 在ArrayList每次操作時, 在操作之前和之後都

c#設計模式代理模式(Proxy Pattern)

ole 購物 click size ont 業務 添加 .html 售票 引言 代理這個詞語,大家在現實世界已經頻繁的接觸過,例如火車站代理售票點,因為這些代理售票點的存在,我們不必要去火車站的售票處就可以查詢或者取到火車票.代理點本身是沒有能力生產車票的,我們在代理處享