今天看到一个关于北京地区可以查询高考的分数的新闻。想想自己当时高考的时候,没有网络、手机,加上在农村又没有报纸。每天只能苦苦等待到,受不了的时候就只能到邮局打电话确认可以不可以查分。银子是花了不少,但最后得到的也就是一个分数。现在就好了,不仅各种资讯发达,而且通过注册就可以等到最新信息。说到这里,Observer Pattern也就说完了,剩下的就是实现了。
IronPython的实现如下:

class ScoreSystem(object):    
        def __init__(self):    
                self.observers = []
        
        def add_observer(self, observer):    
                self.observers.append(observer)    

        def remove_observer(self, observer):    
                self.observers.append(observer)

        def publish(self, message):
                for observer in self.observers:
                     observer.notify(message)

class Student(object):
        def __init__(self, name):
                self.name = name;    
                self.observers = []

        def notify(self, message):
                print self.name,":",message

if __name__ == "__main__":
        scoreSystem = ScoreSystem()
        student1 = Student("Ben")
        scoreSystem.add_observer(student1)
        student2 = Student("James")
        scoreSystem.add_observer(student2)
        scoreSystem.publish("Score is available now!")

    其中,ScoreSystem就代表实际中的查分系统,而Student就是高考考生。Student通过ScoreSystem的add_observer()的接口注册后,一旦有消息就可以及时得到通知,而不需要不断地询问是否可以查询了。