设计模式 - 代理模式
2016-01-25 本文已影响65人
Mitchell
代理模式
-
为其他对象提供一种代理以控制对这个对象的访问。
屏幕快照 2016-01-25 下午8.24.06.png - 举例:
using System;
namespace Factory1
{
//代理类提供的接口
interface IGiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
//接受者
class SchoolGirl{
private string name;
public string Name
{
get{ return name;}
set{ name = Name;}
}
}
//追求者
class Pursuit:IGiveGift
{
SchoolGirl mm;
public Pursuit(SchoolGirl mm)
{
this.mm = mm;
}
public void GiveDolls()
{
Console.WriteLine (mm.Name + "give dolls");
}
public void GiveFlowers()
{
Console.WriteLine (mm.Name + "give your fllowers");
}
public void GiveChocolate()
{
Console.WriteLine (mm.Name + "give your chocolate");
}
}
//代理类
class Proxy:IGiveGift
{
Pursuit gg;
//创建追求者
public Proxy(SchoolGirl mm)
{
gg = new Pursuit (mm);
}
public void GiveDolls()
{
gg.GiveDolls ();
}
public void GiveFlowers()
{
gg.GiveFlowers ();
}
public void GiveChocolate()
{
gg.GiveChocolate ();
}
}
class MainClass
{
public static void Main (string[] args)
{
SchoolGirl jj = new SchoolGirl();
jj.Name = "jioajioa";
Proxy daili = new Proxy (jj);
daili.GiveDolls ();
daili.GiveChocolate ();
daili.GiveFlowers ();
Console.Read ();
}
}
}
代理模式应用
- 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真是对象。(HTML 网页中有很多文字和图片,用虚拟代理代替了真实的图片)
- 安全代理,用来控制真是对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
- 智能指引,是指当调用真是的对象的时候,代理处理另外一些事情。