设计模式的艺术之道–观察者模式
声明:本系列为刘伟老师博客内容总结(http://blog.youkuaiyun.com/lovelion),博客中有完整的设计模式的相关博文,以及作者的出版书籍推荐
本系列内容思路分析借鉴了刘伟老师的博文内容,同时改用C#代码进行代码的演示和分析(Java资料过多 C#表示默哀).
本系列全部源码均在文末地址给出。
本系列开始讲解行为型模式,关注如何将现有类或对象组织在一起形成更加强大的结构。
- 行为型模式(Behavioral Pattern)
关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责
不仅仅关注类和对象本身,还重点关注它们之间的相互作用和职责划分 - 类行为型模式
使用继承关系在几个类之间分配行为,主要通过多态等方式来分配父类与子类的职责 - 对象行为型模式
使用对象的关联关系来分配行为,主要通过对象关联等方式来分配两个或多个类的职责
11种常见的行为型模式
观察者模式–对象间的联动
“红灯停,绿灯行”,在这个过程中,交通信号灯是汽车的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车。
在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系,一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动,正所谓“触一而牵百发”。
1.1定义
-观察者模式 (ObserverPattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。
- 发生改变的对象称为观察目标,被通知的对象称为观察者
- 一个观察目标可以对应多个观察者
别称: 发布-订阅(Publish/Subscribe)模式
1.2情景实例
问题描述
- 多人联机对战
在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队中的某一成员受到敌人攻击时将给所有其他盟友发送通知,盟友收到通知后将做出响应。
初步思路分析
开发人员决定引入一个新的角色——“战队控制中心”——来负责维护和管理每个战队所有成员的信息。当一个联盟成员受到攻击时,将向相应的战队控制中心发送求助信息,战队控制中心再逐一通知每个盟友,盟友再作出响应。
AllyControlCenter充当目标类,ConcreteAllyControlCenter充当具体目标类,Observer充当抽象观察者,Player充当具体观察者。
UML类图
实例关键源代码
abstract class AllyControlCenter
{
protected string allyName; //战队名称
protected List<IObserver> players = new List<IObserver>(); //定义一个集合用于存储战队成员
public void SetAllyName(string allyName)
{

本文探讨了观察者模式,一种行为型设计模式,用于在对象间建立一对多的关系,使得当一个对象状态改变时,其他依赖该对象的对象都会得到通知并自动更新。文章通过多人联机对战游戏的例子,解释了观察者模式的角色和工作原理,并展示了C#中使用委托和事件实现观察者模式的代码示例。此外,文章还提到了观察者模式在MVC架构中的应用。
最低0.47元/天 解锁文章
678

被折叠的 条评论
为什么被折叠?



