代理模式uml圖
//先產生一個Interface 用來實作方法
interface IGiyeGift {
void GiveDolls();
void GiveFlowers();
void GiveChoclate();
}
//實作一個資料內容
class schoolGirl {
private string name;
public string NameSet {
get { return name;}
set {name = value;}
}
}
//被代理人的類別
class pursit : IGiyeGift
{
schoolGirl mm;
public pursit(schoolGirl dd)
{
this.mm = dd;
}
public void GiveDolls()
{
Console.WriteLine(this.mm.NameSet+"TestDolls");
}
public void GiveFlowers()
{
Console.WriteLine(this.mm.NameSet + "Flowers");
}
public void GiveChoclate()
{
Console.WriteLine(this.mm.NameSet + "TestCholate");
}
}
//代理人的類別項目
class Proxy : IGiyeGift
{
pursit mm;
public Proxy(schoolGirl MM)
{
this.mm = new pursit(MM);
}
public void GiveDolls()
{
mm.GiveDolls();
}
public void GiveFlowers()
{
mm.GiveFlowers();
}
public void GiveChoclate()
{
mm.GiveChoclate();
}
}
/// <summary>
/// 主程式用來產生主要項目, 透過代理人
/// </summary>
class Program
{
static void Main(string[] args)
{
schoolGirl DDa = new schoolGirl();
DDa.NameSet = "王國權 ";
Proxy Pxy = new Proxy(DDa);
Pxy.GiveDolls();
Pxy.GiveFlowers();
Pxy.GiveChoclate();
Console.ReadLine();
}
}
要點:
1. [代理者]與[被代理者]繼承同一介面(具有相同方法)
2. [代理者]內部New一個[被代理者]的Class, 取代原本[被代理者]的內容與資料
3. 只要針對[代理者]進行操作即可
作用:
遠端代理。隱藏一個物件存在於不同位址空間的事實。(ex .NET 的 WebService 應用)。
虛擬代理。用來存放實體化需要很長時間的真實物件。(ex 圖片載入在慢慢出來)。
安全代理。控制真實物件存取的權限。
參考代理。當調用真實物件時,代理可以計算真實物件被參考的次數,或是真實物件正在使用,請下個使用者稍待。
參考網址:
http://sourcemaking.com/design_patterns/proxy
http://www.dotblogs.com.tw/atowngit/archive/2010/03/09/13956.aspx
留言列表