对象间的联动——观察者模式(一)

    “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(更准确地说应该是汽车驾驶员)的观察目标,而汽车是观察者。随着交通信号灯的变化,汽车的行为也将随之而变化,一盏交通信号灯可以指挥多辆汽车。如图22-1所示:

    图22-1 交通信号灯与汽车示意图

    【插曲:本图是根据网络上一张图PS的,但改为黑白图片之后我把那张彩色的原始图片删除了,后悔ing…,怎么根据黑白图片查询彩色图片啊,这样的工具,有木有!!那张彩色的原图很漂亮,有木有人能够帮我找一找,大哭】

    22.1 多人联机对战游戏的设计

    Sunny软件公司欲开发一款多人联机对战游戏(类似魔兽世界、星际争霸等游戏),在该游戏中,多个玩家可以加入同一战队组成联盟,当战队中某一成员受到敌人攻击时将给所有其他盟友发送通知,盟友收到通知后将作出响应。

    Sunny软件公司开发人员需要提供一个设计方案来实现战队成员之间的联动。

    Sunny软件公司开发人员通过对系统功能需求进行分析,发现在该系统中战队成员之间的联动过程可以简单描述如下:

    如果按照上述思路来设计系统,由于联盟成员在受到攻击时需要通知他的每一个盟友,因此每个联盟成员都需要持有其他所有盟友的信息,这将导致系统开销较大,因此Sunny公司开发人员决定引入一个新的角色——“战队控制中心”——来负责维护和管理每个战队所有成员的信息。当一个联盟成员受到攻击时,将向相应的战队控制中心发送求助信息,战队控制中心再逐一通知每个盟友,盟友再作出响应,如图22-2所示:

    对象间的联动——观察者模式(一) - 图1

    图22-2 多人联机对战游戏中对象的联动

    在图22-2中,受攻击的联盟成员将与战队控制中心产生联动,战队控制中心还将与其他盟友产生联动。

    别着急,本章所介绍的观察者模式将为对象之间的联动提供一个优秀的解决方案,下面就让我们正式进入观察者模式的学习。