代理模式
来源:互联网 发布:小世界网络与社交 编辑:程序博客网 时间:2024/06/04 18:59
什么是代理模式,我自已看了一些资料后总结了下:就是用类B去代理类A,并由类B(也就是代理类)去控制类A的引用。
代理就像中介,比如你卖房子,中介就像你的代理类,他帮你找到买房的人,而卖房的动作其实是你自已去完成的,而不是中介去干。
但类A和类B要能干相同的事情,也就是说代理类B要知道源对象A能干什么,可以干什么。所以这就要他们都有一个共同的相关联的,就是都从同一个接口派生出来(多态性),
下面来看一个西门庆和潘金莲的例子吧:
来看下代码吧:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
// 同种类型的女人
public interface IKindWoman
{
//抛眉眼
void PaoMeiYan();
//那什么什么
void Play();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//潘金莲是这类女人,所以继承此接口
class PanJingLian:IKindWoman
{
public void PaoMeiYan()
{
Console.WriteLine("潘金莲抛眉眼");
}
public void Play()
{
Console.WriteLine("潘金莲和西门庆偷情");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//定义一个媒婆,媒婆是来代理潘金莲的
public class MeiPo:IKindWoman
{
IKindWoman woman;
//默认媒婆代理潘金莲
public MeiPo()
{
this.woman = new PanJingLian();
}
//媒婆还可以代理别的这一类女人
public MeiPo(IKindWoman woman)
{
this.woman = woman;
}
public void PaoMeiYan()
{
//当然不是媒婆自已抛,她也一大把年纪了
woman.PaoMeiYan();
}
public void Play()
{
//这更不可能是媒婆自己来啊,表面上是她,其实是她代理的人
woman.Play();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//定义一个卢俊义的老婆贾氏,因为她也是这一类人
public class JiaSi:IKindWoman
{
public void PaoMeiYan()
{
Console.WriteLine("贾氏抛眉眼");
}
public void Play()
{
Console.WriteLine("贾氏也在和西门庆。。。。也不是什么好鸟!");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//定义一个西门庆
class XiMenQing
{
static void Main(string[] args)
{
//把媒婆叫出来
MeiPo meipo1 = new MeiPo();
//表面上是媒婆在做这些,但其实是潘金莲在做,媒婆嘛,怎么可能!!
meipo1.PaoMeiYan();
meipo1.Play();
//媒婆也代理贾氏
MeiPo meipo2 = new MeiPo(new JiaSi());
meipo2.Play();
meipo2.PaoMeiYan();
}
}
}
当然,我也是正在学习,只了解了个大概,没详看,至于代理还分为不同的类型,大家可以在网上看看。。。
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- edid 获取显示器详细信息
- Open XML SDK 2.0 for Microsoft Office
- SHGetFileInfo 函数参数解释
- jquery ajax 请求参数详细说明 及 实例
- dbms_metadata.get_ddl ORA-31603 ORA-06512
- 代理模式
- QT 新手练习 模仿系统自带 记事本
- HBase vs Cassandra
- error LNK2005: __cinit already defined in libcmt.lib(crt0dat.obj)
- 声明变量在if(!变量)前后的区别
- 嵌入式linux、QT、ARM、android研发学习交流,软考嵌入式系统设计师交流群,欢迎大家加入,群号95388240
- 每天进步一点点-->const用法详解
- 写给即将入行的程序员的一封信[转]
- 关于.net安全认证