導言:臨近年關,提高班也要放假了,我不得不去老王店裡買點東西,因為有要事在身,我委托了火雲去王老板那裡買點鮮花與糖果。
在這裡subject定義為一個接口,RealSubject為本人,Proxy即為火雲,我和火雲繼承了這個接口來實現買東西這件事情。代碼為:
[csharp]
<SPAN style="FONT-SIZE: 18px">interface BuySomething //接口-買東西
{
void BuyFlowers();
void BuyCandys();
}
class MoneySource : BuySomething //出錢者-我
{
ShopKeeper laowang;
public MoneySource(ShopKeeper laowang)
{
this.laowang = laowang;
}
public void BuyFlowers()
{
Console.WriteLine(laowang.Name + "我要買鮮花");
}
public void BuyCandys()
{
Console.WriteLine(laowang.Name + "我要買糖果");
}
}
class ShopKeeper //商店店主-老王
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Proxy : BuySomething //代理類
{
MoneySource gangge;
public Proxy(ShopKeeper laowang)
{
gangge = new MoneySource(laowang);
}
public void BuyFlowers()
{
gangge.BuyFlowers();
}
public void BuyCandys()
{
gangge.BuyCandys();
}
}</SPAN>
interface BuySomething //接口-買東西
{
void BuyFlowers();
void BuyCandys();
}
class MoneySource : BuySomething //出錢者-我
{
ShopKeeper laowang;
public MoneySource(ShopKeeper laowang)
{
this.laowang = laowang;
}
public void BuyFlowers()
{
Console.WriteLine(laowang.Name + "我要買鮮花");
}
public void BuyCandys()
{
Console.WriteLine(laowang.Name + "我要買糖果");
}
}
class ShopKeeper //商店店主-老王
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Proxy : BuySomething //代理類
{
MoneySource gangge;
public Proxy(ShopKeeper laowang)
{
gangge = new MoneySource(laowang);
}
public void BuyFlowers()
{
gangge.BuyFlowers();
}
public void BuyCandys()
{
gangge.BuyCandys();
}
}
在代理類中,保存了一個引用使得代理可以訪問實體。也就是說火雲這個代理裡面有我讓他買東西的方法存在。
客戶端代碼:
[csharp]
<SPAN style="FONT-SIZE: 18px">static void Main(string[] args)
{
ShopKeeper laowang = new ShopKeeper();
laowang.Name = "王陸軍";
Proxy huoyun = new Proxy(laowang);
huoyun.BuyFlowers();
huoyun.BuyCandys();
Console.Read();
}</SPAN>
static void Main(string[] args)
{
ShopKeeper laowang = new ShopKeeper();
laowang.Name = "王陸軍";
Proxy huoyun = new Proxy(laowang);
huoyun.BuyFlowers();
huoyun.BuyCandys();
Console.Read();
}這樣就可以達到讓火雲替我買東西的事情了。
代理模式:就是為其他對象提供一種代理以控制對這個對象的訪問
在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
代理模式分為:
1.遠程代理:為一個對象在不同的地址空間提供局部代表.這樣可以隱藏一個對象存在於不同地址空間的事實.
2.虛擬代理:根據需要創建開銷很大的對象,通過它來存放實例化需要很長時間的真實對象.
3.安全代理:用來控制真實對象訪問時的權限.
4.智能指引:當調用真實的對象時,代理處理另外一些事.
代理模式其實就是在訪問對象時引入一定程度的間接性,因為這種間接性,可以附加多重用途。