您的位置:首页 > 其它

设计模式之我吾-代理模式的理解

2008-08-22 11:18 363 查看
杜思波最近啊!一直在研读设计模式相关书籍,深感设计模式是程序设计之良药也,为什么这么说呢?因为我读完几个模式之后啊,深深赶到其中的乐趣。

设计模式中有很多种模式概念,我们一个个来逐个讲解。

这次我们要讲解我对代理模式的理解,首先我们要了解代理模式的基本概念,我们先来讲一个小故事来轻松轻松。从前有一个秀才,十分好学,少年时光基本用在四书五经上了,可是转眼青年了,书是读了不少,但是意中人却无一个,这可急坏了秀才,如何是好啊!乡里乡亲的也有好心人,她是一个媒婆(以前专门给人介绍对象的人叫媒婆),名叫花姑,她也是个热心肠的人,看见秀才眉清目秀的还没有个意中人心里也十分想给秀才介绍一个,于是就在暗地里面物色着合适对象,不经意间的一个早上在河边看到一个姑娘,那个生的水灵哦!!于是急忙上前打听姑娘的情况,方知姑娘 年芳18,还未许配人家,这下可把花姑给乐坏了!心想这下秀才有戏了,下午花菇赶紧回家和秀才说起此事,秀才也是兴奋的不得了,可是问题又来了,什么问题?秀才自幼饱读诗书,是个十足的读书人,对男女感情之事甚少触及,因此都不知道如何和姑娘交流,这个可着急坏了花姑了,为了能成全两人,花姑想了一个办法,由她来给两人牵线,给他们传递信息,待到时机成熟之后再见面谈婚论嫁。于是花姑和秀才约定好了该说什么不该说什么。定下来以后,花姑就去传达秀才的美意,姑娘知道秀才对自己有意思,也托花姑传递自己对秀才的好感,这样来来去去,半年之后,两人终成眷属了。真是感人啊~~~现代社会还有这等好事否?o(∩_∩)o...~~~~~

好了故事讲完了,我们回归正题来讲设计模式中了,其实上面的故事从侧面就映射除了设计模式中的一个模式-代理模式。

秀才:委托者

花姑:代理

姑娘:被告知者(同时也是委托者)

该做什么不该做什么:定义约定接口

代理模式中牵涉到上述三个概念,秀才作为一个(委托者),委托(代理)花姑去告诉姑娘(被告知者)自己的意愿,而花姑呢则按照秀才约定好的规则(接口)去告诉姑娘秀才的意愿。这样来回就让秀才和姑娘两人建立起了感情,但是这个过程两人并没有参加进来,而是通过花姑作为代理来传递的。

这个就是代理模式工作的流程。

下述给出代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace 设计模式_代理模式

{

class Program

{

static void Main(string[] args)

{

MM plmm = new MM();

plmm.MMName = "美女女孩";

Proxy Proxy1 = new Proxy(plmm);

Proxy1.Givedolis();

Proxy1.GiveFlowes();

Proxy1.GiveMoney();

Console.ReadLine();

}

}

class pursuit : Ifun //秀才

{

MM plmm=null;

public pursuit(MM name)

{

plmm = name;

}

public void Givedolis()

{

Console.WriteLine(plmm.MMName+":秀才送给你针");

}

public void GiveFlowes()

{

Console.WriteLine(plmm.MMName+":秀才送给你线");

}

public void GiveMoney()

{

Console.WriteLine(plmm.MMName+":秀才送给你布料");

}

}

class Proxy:Ifun //花姑

{

pursuit GG = null;

public Proxy(MM name)

{

GG = new pursuit(name);

}

public void Givedolis()

{

GG.Givedolis();

}

public void GiveFlowes()

{

GG.GiveFlowes();

}

public void GiveMoney()

{

GG.GiveMoney();

}

}

class MM//姑娘

{

private string MMname = null;

public string MMName

{

get { return MMname; }

set { MMname = value; }

}

}

//行为接口

interface Ifun

{

void Givedolis();

void GiveFlowes();

void GiveMoney();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: