Observer 在对象之间定义一个一对多的依赖关系,从而当一个对象状态发生改变时,所有依赖于这个对象的对象都能够得到通知,并对上述改变做出反应.
2006-12-31 10:24
531 查看
public class Interesting
2 public class Curious
2 public delegate void ChangeHandler();
2
//observer
2 Gof.Nan.Test.Interesting i = new Gof.Nan.Test.Interesting();
3 Gof.Nan.Test.Curious c = new Gof.Nan.Test.Curious(i);
4 i.Wiggle();
上面的例子我们用委托来声明一个回调,这样很不安全任何一个可以访问Interesting类的_change的类都可以调用这个委托.可以直接调用i._change();试下,我们可以用Event关键字来加强这种限制.
public class Interesting
2{
3 public event ChangeHandler _change;
4 public void Wiggle()//事件引起变化
5 {
6 if (_change != null)
7 {
8 _change();
9 }
10 }
11}
这时我们在用i._change();调用系统就会提示事件只能出现在+=或-=的左边.
Gui中的观察者模式
没时间了,有时间在学习了.
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
Design Principles:
Strive for loosely coupled designs between objects that interact.
2 public class Curious
2 public delegate void ChangeHandler();
2
//observer
2 Gof.Nan.Test.Interesting i = new Gof.Nan.Test.Interesting();
3 Gof.Nan.Test.Curious c = new Gof.Nan.Test.Curious(i);
4 i.Wiggle();
上面的例子我们用委托来声明一个回调,这样很不安全任何一个可以访问Interesting类的_change的类都可以调用这个委托.可以直接调用i._change();试下,我们可以用Event关键字来加强这种限制.
public class Interesting
2{
3 public event ChangeHandler _change;
4 public void Wiggle()//事件引起变化
5 {
6 if (_change != null)
7 {
8 _change();
9 }
10 }
11}
这时我们在用i._change();调用系统就会提示事件只能出现在+=或-=的左边.
Gui中的观察者模式
没时间了,有时间在学习了.
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
Design Principles:
Strive for loosely coupled designs between objects that interact.
相关文章推荐
- 观察者模式:当一个对象状态发生改变时,通知依赖他的全部对象都发生改变
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- MVC4 违反了引用完整性约束: 在此关系的主对象和依赖对象之间,定义引用约束的属性值不一致。
- Mediator 用一个中介者对象来封装一系列的对象交互。中介者使各个对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
- 观察者模式定义了一种一对多的对象关系,当一个对象改变时,此对象对应的监控对象跟着改变!!!
- WPFS数据绑定(要是后台类对象的属性值发生改变,通知在“客户端界面与之绑定的控件值”也发生改变需要实现INotitypropertyChanged接口)
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数, 并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同, 例如12121、3
- 微软企业库Enterprise Library学习笔记二各功能之间的依赖关系以及对象创建
- 剑指offer:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,5,8 后,得到的堆的结构示意图是下述图表中的哪个?
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- Springs 依赖注入,组装对象之间的依赖关系(2)
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 50道编程题之09:一个数如果刚好等于它的因子之和,这个数就称为"完数"。例如6 = 1+2+3,编程实现求[a,b]之间的所有完数
- Factory 定义一个接口,客户可以使用这个接口创建一个对象.同时,我们还可以控制对那个类进行实例化
- 微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建