Observer 在对象之间定义一个一对多的依赖关系,从而当一个对象状态发生改变时,所有依赖于这个对象的对象都能够得到通知,并对上述改变做出反应....

ContractedBlock.gif ExpandedBlockStart.gif Interesting
 1None.gif    public class Interesting
 2ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 3InBlock.gif        public ChangeHandler _change;
 4InBlock.gif        public void Wiggle()//事件引起变化
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 6InBlock.gif            if (_change != null)
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 8InBlock.gif                _change();
 9ExpandedSubBlockEnd.gif            }

10ExpandedSubBlockEnd.gif        }

11ExpandedBlockEnd.gif    }
ContractedBlock.gif ExpandedBlockStart.gif Curious
 1None.gif    public class Curious
 2ExpandedBlockStart.gifContractedBlock.gif    dot.gif{
 3InBlock.gif        public Curious(Interesting i)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 5InBlock.gif            i._change += new ChangeHandler(React);
 6ExpandedSubBlockEnd.gif        }

 7InBlock.gif        public void React()
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 9InBlock.gif            HttpContext.Current.Response.Write( "Curious did something!" ); 
10ExpandedSubBlockEnd.gif        }

11ExpandedBlockEnd.gif    }
ContractedBlock.gif ExpandedBlockStart.gif delegate
1None.gif    public delegate void ChangeHandler();
2None.gif
ContractedBlock.gif ExpandedBlockStart.gif 注册及引发事件
1None.gif        //observer
2None.gif        Gof.Nan.Test.Interesting i = new Gof.Nan.Test.Interesting();
3None.gif        Gof.Nan.Test.Curious c = new Gof.Nan.Test.Curious(i);
4None.gif        i.Wiggle();
上面的例子我们用委托来声明一个回调,这样很不安全任何一个可以访问Interesting类的_change的类都可以调用这个委托.可以直接调用i._change();试下,我们可以用Event关键字来加强这种限制.
ContractedBlock.gif ExpandedBlockStart.gif 用事件来限制委托调用
 1None.gifpublic class Interesting
 2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
 3InBlock.gif    public event ChangeHandler _change;
 4InBlock.gif    public void Wiggle()//事件引起变化 
 5ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 6InBlock.gif        if (_change != null)
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 8InBlock.gif            _change();
 9ExpandedSubBlockEnd.gif        }

10ExpandedSubBlockEnd.gif    }

11ExpandedBlockEnd.gif}
这时我们在用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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值