c# 代理模式
c# 代理模式
发布时间:2016-12-28 来源:查字典编辑
摘要:代理模式的应用:远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。虚拟代理,根据需要创建开销很大的...

代理模式的应用:

远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。

虚拟代理,根据需要创建开销很大的对象,通过代理来存放实例化需要很长时间的真实对象。

安全代理,用来控制真实对象的访问权限。

智能代理,当调用代理时,可以代理处理一些额外的功能。

案例场景:

向一位自己心仪的女孩表达爱意,一般我们有两种选择:亲自出马(有自信的人)和 使用‘媒婆'(比较害羞)。

其中使用‘媒婆'就是代理行为,我们实现如下:

调用代理模式的主函数:

复制代码 代码如下:

class Program

{

static void Main(string[] args)

{

SchoolGirl jiaojiao = new SchoolGirl();

jiaojiao.Name = "李娇娇";

//亲自出马

IGiveGift self = new Pursuit(jiaojiao);

self.GiveChocolate();//送巧克力

self.GiveDolls();//送洋娃娃

self.GiveFlowers();//送鲜花

//使用‘媒婆'

IGiveGift daili = new Proxy(jiaojiao);

daili.GiveChocolate();//送巧克力

daili.GiveDolls();//送洋娃娃

daili.GiveFlowers();//送鲜花

Console.ReadKey();

}

}

SchoolGirl类是代表女孩对象,实现如下:

复制代码 代码如下:

public class SchoolGirl

{

private string name;

public string Name

{

get;

set;

}

}

Pursuit类是代表一个真实的事物(追求女孩的追求者),实现如下:

复制代码 代码如下:

public class Pursuit : IGiveGift

{

SchoolGirl mm;

public Pursuit(SchoolGirl mm)

{

this.mm = mm;

}

public void GiveDolls()

{

Console.WriteLine(mm.Name+"送你洋娃娃");

}

public void GiveFlowers()

{

Console.WriteLine(mm.Name + "送你鲜花");

}

public void GiveChocolate()

{

Console.WriteLine(mm.Name + "送你巧克力");

}

}

Proxy类是Pursuit类的代表,实现如下:

复制代码 代码如下:

public class Proxy : IGiveGift

{

Pursuit gg;

public Proxy(SchoolGirl mm)

{

this.gg = new Pursuit(mm);

}

public void GiveDolls()

{

gg.GiveDolls();

}

public void GiveFlowers()

{

gg.GiveFlowers();

}

public void GiveChocolate()

{

gg.GiveChocolate();

}

}

Pursuit类和Proxy类都继承IGiveGift接口,实现如下:

复制代码 代码如下:

interface IGiveGift

{

void GiveDolls();

void GiveFlowers();

void GiveChocolate();

}

我们看一张代理模式的结构图:

c# 代理模式1

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类