由观察者模式的升级,得出委托代理
来源:互联网 发布:编程猫的网址 编辑:程序博客网 时间:2024/05/26 07:29
大家在实际项目开发过程成,有这么一种情况:在VS2010开发环境中,当我们创建一个页面后,我们将鼠标移动到设计界面时候,系统会自动显示能拖的组件;当鼠标移动到代码界面时候,系统自动隐藏组件;这个是怎么实现的呢?我们慢慢来将。咱先看看什么是观察者模式:定义了1对多的依赖关系,让多个观察者对象同时监听某一个主题对象;这个主题对象发生变化的时候,会通知所有的观察者对象,让他们能够自己更新自己。就是说我们又个类中可以添加、删除观察者对象,当我们的这个类中的状态发生改变的时候,循环调用此类中所有观察者的更新方法;从而达到更新各观察者对象的信息。
我们先来分析Observer类,其实它就只有个更新的方法(Update()),实现对具体的观察对象的更新;
abstract class Observer{public void Update();}抽象类Subject类,完成添加、删除和通知各观察者对象更新的功能;
abstract class Subject{private IList<Observer> observers=new List<Observer>();//增加观察者对象public void Attach( Observer tmp){observers.add(tmp);}//删除观察者对象public void Detach( Observer tmp){observers.delete(tmp);}//通知更新数据public void Notify(){foreach( Observer tmp in observers){tmp.Update();}}}
具体的主题类实际上就只有状态改变的时候,实现对状态值的赋值:
class ConcreteSubject:Subject{private string subjectState;public string SubjectState{ get{return subjectState;} set{ subjectState=value;}}}具体的观察者角色可以保存一个具体的主题类,当主题类的状态发生改变的,调用更新方法更新数据;
class ConcreteObserver:Observer{private string name;private string observerState;private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject subject,string name){this.name=name;this.subject=subject;}public override void Update(){ observerState =subject.SubjectState; Console.WriteLine("观察者{0}的更新状态为:{1}",name,observerState);}}客户端的代码比较简单:
static void Main(String[] arg){ConcreteSubject s=new ConcreteSubject();s.Attach(new ConcreteObserver(s,"A"));s.Attach(new ConcreteObserver(s,"B"));s.Attach(new ConcreteObserver(s,"C"));s.SubjectState="Updated";s.Notify();}
由此,委托事件代理闪亮登场;这个是什么东东呢?就是我们先申明一个代理delegate void Evenhandler();
我们在具体的主题中申明一个事件:public Evenhandler update; 在通知的方法中调用update();在实际的客户调用的时候,则是具体主题对象.Update+=new Evenhandler (具体观察者对象.更新的方法);这个方式进行委托代理。委托就是一种引用方法的类型。一旦委托分配了方法,委托将与方法具有完全相同的行为。委托的方法使用可以像其他的方法一样。具有相同参数、返回值。我们平常可以看成函数的抽象类;委托的实例实际就是一个具体的函数。一个委托可以搭载多个方法,从而替换我们循环去查找,调用的方式;另外它只是代理其方法,其本身是什么类型并不用去关系。我们在文章最开始的讲的情况就迎刃而解了,你明白了吗?
- 由观察者模式的升级,得出委托代理
- C#委托 和代理模式 观察者模式的关系
- 观察者模式和事件委托和代理模式
- 在C#中使用代理(即委托)的方式触发事件(观察者模式)
- 委托对观察者模式的改进
- C# 观察者模式(委托的使用)
- 观察者模式——委托的使用
- 观察者模式,事件,委托
- 委托和观察者模式
- 观察者模式与委托
- 观察者模式和委托
- 观察者模式、代理模式
- iOS 观察者模式以及代理的例子
- java的委托机制 .....代理模式
- 由递归算法得出的思考
- 代理委托模式
- 代理模式和委托
- swift 委托/代理模式
- Managing Bitmap Memory
- 富文本编辑
- 《征服C指针》读后笔记
- Displaying Bitmaps in Your UI
- myeclispe 中deploy时不能出现deploy location?
- 由观察者模式的升级,得出委托代理
- SMP与Cluster的比较
- UVA File Fragmentation(文件复原)
- 导入cvs文件的方法
- 小怪物重制计划第六天
- MySql 问题解决整理
- Displaying Bitmap小结
- 计算两个字符串的距离
- Oracle回收站功能开启与关闭