【大話設計模式】——代理模式
一、概念
現實生活中,我們每個人的能力是有限的,總有一些事情讓我們束手無策,我們就可以找別人來幫忙,幫我們的這個人稱之為代理。下面讓我們看一下代理模式的概念:
代理模式(Proxy):為其他物件提供一種代理以控制對這個物件的訪問。
二、UML圖
Subject(抽象角色):定義了RealSubject和Proxy的共用介面,這樣就在任何使用RealSubject的地方都可以使用Proxy.
RealSubject(真實角色):定義了Proxy所代表的真實實體。
Proxy(代理角色):儲存了一個引用使得代理可以訪問實體,並提供一個與Subject的介面相同的介面,這樣代理就可以用來代替實體。
RealSubject和Proxy都繼承了Subject抽象類的方法,Proxy和RealSubject的關係是關聯關係。體現在程式碼上,RealSubject類中書寫具體的方法,Proxy去呼叫RealSubject中的方法。Proxy和RealSubject共同實現Subject的介面。
三、例項解析
有的時候,一些突發事件蹦出來想要打亂了我們的計劃,卻又正好趕上我們有更加重要的事情要親自去做,那這件緊急不重要的事情怎麼辦呢?如果可以的話,讓別人代替我們完成。
這就要用到我們的代理了,XX去幫我打個水吧,XX去幫我取個快遞吧~
下面是應用了代理模式的程式碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
Proxy p=new Proxy ();
p.BringWater();
p.BringPackage();
Console .Read ();
}
}
//定義了Roommates和Proxy的公用介面
abstract class Working
{
public abstract void BringWater();
public abstract void BringPackage();
}
//讓代理去實現幹活的介面,定義了Proxy所代表的真實實體。
class Roommates : Working
{
public override void BringWater()
{
Console.WriteLine("兄弟,幫我打水吧!");
}
public override void BringPackage()
{
Console.WriteLine("兄弟,幫我取快遞吧!");
}
}
//保持一個引用使得代理可以訪問實體,並提供一個與Working的介面相同的介面,這樣代理就可以用來替代實體。
class Proxy:Working
{
Roommates r;
public override void BringWater()
{
if (r == null)
{
r = new Roommates();
}
r.BringWater();
}
public override void BringPackage()
{
if (r == null)
{
r = new Roommates();
}
r.BringPackage();
}
}
}
執行結果:
四、總結
代理模式應用:
1. 遠端代理,也就是為一個物件在不同的地址空間提供區域性代表。這樣可以隱藏一個物件存在於不同地址空間的事實。
2. 虛擬代理,根據需要建立開銷很大的物件。通過它來存放例項化需要很長時間的真實物件。
3. 安全代理,用來控制真實物件訪問的許可權。
4. 智慧指引,指當呼叫真實物件時,代理處理另外一些事。
本質:通過使用引用物件來訪問真實物件,在這裡代理物件充當用於客戶端和真實物件的中介者。
個人理解:根據愛因斯坦的相對性,凡事有利必有弊,做事要有度。代理模式運用的好就可以節省記憶體,保障了使用者安全,方便排程。運用的不好,就成了九曲十八彎,費力不討好。不過相信一點,存在必合理,雖然現在我們只能對它有一個初步的瞭解,不怕不知道,就怕不知道,總有一天會有它的用武之地!
相關文章
- 大話設計模式讀書筆記6——代理模式設計模式筆記
- 大話--代理模式模式
- 大話設計模式—命令模式設計模式
- 【大話設計模式】——策略模式設計模式
- 大話設計模式設計模式
- 大話設計模式:工廠模式設計模式
- 【大話設計模式】—— 原型模式設計模式原型
- 【大話設計模式】——裝飾模式設計模式
- 【大話設計模式】—— 模板方法模式設計模式
- 大話設計模式—組合模式設計模式
- 大話設計模式—橋接模式設計模式橋接
- 無廢話設計模式(11)結構型模式--代理模式設計模式
- 大話設計模式:抽象工廠模式設計模式抽象
- 【大話設計模式】—— 工廠方法模式設計模式
- 大話設計模式—備忘錄模式設計模式
- 【設計模式】設計模式(一)-- 大話設計模式讀書筆記設計模式筆記
- 設計模式----代理模式設計模式
- 設計模式——代理模式設計模式
- 設計模式-代理模式設計模式
- 設計模式~代理模式設計模式
- 【設計模式】代理模式設計模式
- 【大話設計模式】——淺談設計模式基礎設計模式
- Unity【話大】設計模式之狀態模式Unity設計模式
- 大話設計模式:簡單工廠模式設計模式
- 【大話設計模式】——簡單工廠模式設計模式
- 《設計模式》之代理模式設計模式
- PHP設計模式-代理模式PHP設計模式
- js設計模式--代理模式JS設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式:代理模式Java設計模式
- 設計模式(七)——代理模式設計模式
- 【設計模式之代理模式】設計模式
- 設計模式(九):代理模式設計模式
- 設計模式之代理模式設計模式
- 設計模式 #5 (策略模式、代理模式)設計模式
- 讀《大話設計模式》和《head first 設計模式》心得設計模式
- 1.1 《硬啃設計模式》 第1章 大話設計模式設計模式