14-设计模式教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《14-设计模式教学课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 设计 模式 教学 课件
- 资源描述:
-
1、观察者(观察者(Observer)模式)模式 课本例子课本例子l办公时间做与工作无关的事情办公时间做与工作无关的事情l在老板到来时,前台负责通知好友进入工在老板到来时,前台负责通知好友进入工作状态作状态l注意开放注意开放-封闭原则,依赖倒转原则,降封闭原则,依赖倒转原则,降低耦合性。低耦合性。通知者接口通知者接口interface Subject void Attach(Observer observer); void Detach(Observer observer); void Notify(); string SubjectState get; set; class Secretary
2、: Subject /同事列表同事列表 private IList observers = new List(); private string action; /增加增加 public void Attach(Observer observer) observers.Add(observer); /减少减少 public void Detach(Observer observer) observers.Remove(observer); /通知通知 public void Notify() foreach (Observer o in observers) o.Update(); /前台状态
3、前台状态 public string SubjectState get return action; set action = value; 抽象观察者抽象观察者abstract class Observer protected string name; protected Subject sub; public Observer(string name, Subject sub) this.name = name; this.sub = sub; public abstract void Update(); 看股票的同事看股票的同事class StockObserver : Observer
4、 public StockObserver(string name, Subject sub) : base(name, sub) public override void Update() Console.WriteLine(0 1 关闭股票行情,继续工作!关闭股票行情,继续工作!, sub.SubjectState, name); 看看NBA的同事的同事 class NBAObserver : Observer public NBAObserver(string name, Subject sub) : base(name, sub) public override void Update
5、() Console.WriteLine(0 1 关闭关闭NBA直播,继续工作!直播,继续工作!, sub.SubjectState, name); 客户端客户端class Program static void Main(string args) Secretary tongzizhe = new Secretary(); StockObserver tongshi1 = new StockObserver(魏关姹魏关姹, tongzizhe); NBAObserver tongshi2 = new NBAObserver(易管查易管查, tongzizhe); tongzizhe.Atta
6、ch(tongshi1); tongzizhe.Attach(tongshi2); tongzizhe.SecretaryState = 老板回来了!老板回来了!; tongzizhe.Notify(); Console.Read(); l观察者模式又叫做观察者模式又叫做:l发布发布-订阅(订阅(Publish/Subscribe)模式)模式l模型模型-视图(视图(Model/View)模式)模式l源源-监听器(监听器(Source/Listener)模式)模式l从属者(从属者(Dependents)模式。)模式。l观察者模式定义了一种一对多的依赖关系,观察者模式定义了一种一对多的依赖关系,让
7、多个观察者对象同时监听某一个主题对让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动会通知所有观察者对象,使它们能够自动更新自己。更新自己。l一个软件系统常常要求在某一个对象的状态发一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改生变化的时候,某些其它的对象做出相应的改变。做到这一点的设计方案有很多,但是变。做到这一点的设计方案有很多,但是为了为了使系统能够易于复用,应该选择低耦合度的设使系统能够易于复用,应该选择低耦合度的设计方案计方案。l减少对象之间的耦合有利于系统
8、的复用,但是减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低耦合度的对象之间能同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作够维持行动的协调一致,保证高度的协作(Collaboration)。)。观察者模式是满足这一要观察者模式是满足这一要求的各种设计方案中最重要的一种。求的各种设计方案中最重要的一种。观察者模式的结构 l抽象主题(抽象主题(Subject)角色:)角色:l一个目标可以被多个观察者观察一个目标可以被多个观察者观察l目标提供对观察者注册和退订的维护目标提供对观察者注册和退订的维护l当目标的状态发生变化时,目标负责通知所当目标的状态发生变
9、化时,目标负责通知所有注册的、有效地观察者有注册的、有效地观察者l抽象观察者(抽象观察者(Observer)角色:)角色:为所有为所有的具体观察者定义一个接口,在得到主题的具体观察者定义一个接口,在得到主题的通知时更新自己。这个接口叫做更新接的通知时更新自己。这个接口叫做更新接口。抽象观察者角色一般用一个抽象类或口。抽象观察者角色一般用一个抽象类或者一个接口实现。在这个示意性的实现中,者一个接口实现。在这个示意性的实现中,更新接口只包含一个方法(即更新接口只包含一个方法(即Update()方方法),这个方法叫做法),这个方法叫做更新方法。更新方法。 l具体主题(具体主题(ConcreteSub
10、ject)角色:)角色:将将有关状态存入具体现察者对象;在具体主有关状态存入具体现察者对象;在具体主题的内部状态改变时,给所有登记过的观题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做察者发出通知。具体主题角色又叫做具体具体被观察者角色被观察者角色(Concrete Observable)。)。具体主题角色通常用一个具体子类实现。具体主题角色通常用一个具体子类实现。 l具体观察者(具体观察者(ConcreteObserver)角色:)角色:具体现察者角色实现抽象观察者角色所要具体现察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题求的更新接口,以便使本身的状
11、态与主题的状态相协调。如果需要,具体现察者角的状态相协调。如果需要,具体现察者角色可以保存一个指向具体主题对象的引用。色可以保存一个指向具体主题对象的引用。具体观察者角色通常用一个具体子类实现。具体观察者角色通常用一个具体子类实现。 认识观察者模式认识观察者模式l目标和观察者之间的关系目标和观察者之间的关系l典型的一对多的关系典型的一对多的关系l单向依赖单向依赖l观察者依赖于目标观察者依赖于目标l触发通知的时机触发通知的时机l完成了状态维护后触发完成了状态维护后触发l相互观察相互观察lA、B观察观察C,B、C观察观察A(两套观察模式)(两套观察模式)l注意死循环注意死循环l通知的顺序通知的顺序
12、l绝对不要依赖于通知的顺序,多个观察者之间的功绝对不要依赖于通知的顺序,多个观察者之间的功能是平行的,相互不应该有先后的依赖关系能是平行的,相互不应该有先后的依赖关系观察者模式的效果有以下几个优点:观察者模式的效果有以下几个优点:l观察者模式实现了观察者和目标之间的抽观察者模式实现了观察者和目标之间的抽象耦合。象耦合。l观察者模式实现了动态联动观察者模式实现了动态联动l观察者模式支持广播通信。被观察者会向观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。所有的登记过的观察者发出通知。 缺点缺点l可能会引起无谓的操作。可能会引起无谓的操作。l由于采用广播方式,不管观察者需不需要,
13、由于采用广播方式,不管观察者需不需要,每个观察者都会被调用每个观察者都会被调用update方法方法本质本质l触发联动触发联动一个实际应用观察者模式的例子 l该例子演示了注册的投资者在股票市场发该例子演示了注册的投资者在股票市场发生变化时,可以自动得到通知生变化时,可以自动得到通知 / SubjectabstractclassStock/Fieldsprotectedstringsymbol;protecteddoubleprice;privateArrayListinvestors=newArrayList(); / ConstructorpublicStock(stringsymbol,do
展开阅读全文