Interesting
1 public class Interesting 2 { 3 public ChangeHandler _change; 4 public void Wiggle()//事件引起变化 5 { 6 if (_change != null) 7 { 8 _change(); 9 }10 }11 }
Curious
1 public class Curious 2 { 3 public Curious(Interesting i) 4 { 5 i._change += new ChangeHandler(React); 6 } 7 public void React() 8 { 9 HttpContext.Current.Response.Write( "Curious did something!" ); 10 }11 }
delegate
1 public delegate void ChangeHandler();2
注册及引发事件
1 //observer2 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关键字来加强这种限制.
用事件来限制委托调用
1public 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.
转载于:https://www.cnblogs.com/nanshouyong326/archive/2006/12/31/608594.html