代理
代理这个词在我们的生活中应该听到过不少,顾名思义,代理的意思就是如果有三个人,A,B,C,A想要给C东西,而又因为一些原因不能亲自给到B,那么正好有一个C可以代替A去做这件事,就是代替别人做一些事情的人叫做代理人。
代理一般是指在其行业惯例范围内接受他人委托,为他人促成或缔结交易的一般代理人。 代理商(Agents)是代企业打理生意,是厂家给予商家佣金额度的一种经营行为。所代理货物的所有权属于厂家,而不是商家。因为商家不是售卖自己的产品,而是代企业转手卖出去。所以“代理商”,一般是指赚取企业代理佣金的商业单位。(百度回答)
代理的特点
1、职责主要是为本人促成交易和缔结交易;
2、必须固定地从事受他人委托的活动;
3、是独立的商事经营者;
4、代理对象不必是商人,也可以不以营利为目的。
代理模式
代理模式Proxy Pattern,23种常用的面向对象软件的设计模式之一,为其他对象提供一种代理以控制对这个对象的访问。
代理模式的应用
代理模式一般在下列几种情况下使用,
1,远程代理:
这个就是一个对象在不同的地址空间提供局部嗲表,这样可以隐藏一个对象存在于不同地址空间的事实。在一个项目中加入一个Web引用,引用一个WebService,这是在项目中生成一个WebReference的文件夹和文件,使得客户端程序调用dialing就可以解决远程访问的问题。
2,虚拟代理:
根据需要创建开销很大的对象,通过他来存放实例化需要时间的真实对象,从而达到性能的最优化。就像刷网页的时候,有时候网上不好,你看到的图片是一个个未打开的状态,这个就是通过虚拟代理来代替真实的图片,代理存储了真实图片的路径和尺寸。
3,安全代理:
用来控制真实对象访问时的权限,一般用于对象有不同的访问权限的时候。
4,智能指引:
当调用真实的对象时,代理处理另外一些事。
代理模式的结构图
用一个比较简单的例子来让我们更加容易的去学习代理模式。就是我们学过的一个例子,三个人,第一个人通过中间人去送给第三个人的礼物。
代码展示:
代理接口
interface IGiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
第一个人类
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 + "送你巧克力");
}
}
</pre><pre>
中间人类
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();
}
}
主函数中使用的代码
static void Main(string[] args)
{
SchoolGirl jiaojiao = new SchoolGirl();
jiaojiao.Name = "美美";
proxy daili = new proxy(jiaojiao);
daili.GiveDolls();
daili.GiveFlowers();
daili.GiveChocolate();
Console.Read();
}
运行效果
总结:
代理模式在访问对象时引用一定程度的间接性,这种间接性,可以附加多种用途,简单的说,代理就是真实对象的代表。学习了这个模式,感觉还是理解的不是特别到位,简单的总结一下,哪里理解有误的请大神扶正~~~~



