python设计模式实现 -- 观察者模式

写了个简单的 观察者模式   “老板来了”

代码一点点,去感觉有点丑陋 

# -*- coding: utf-8 -*-  

# python 观察者设计模式 老板来了


# 观察者基类

class Subject(object):

    def __init__(self):

        self._observers = []

    

    # 添加观察者

    def attach(self, observer):

        if not observerin self._observers:

            self._observers.append(observer)

            

    # 删除观察者

    def detach(self, observer):

        try:

           self._observers.remove(observer)

        except ValueError:

            print"this is not my observer"

    

    # 变化通知

    def notify(self):

        for observer in self._observers:

            method = getattr(observer, 'update')

            if callable(method):

                return method(self)


class Boss(Subject):

    def __init__(self,status=False):

        super(Boss,self).__init__()

        self._status = status

    

    @property

    def status(self):

        return self._status

    

    @status.setter

    def status(self,value):

        self._status = value

        print"boss's coming status"

        self.notify()

        

class Observer:

    def update(self,subject):

       raise NotImplementedError("Observer need a 'update' method")


class Programmer(Observer):

    def update(self, subject):

        if subject.status == True:

            print"start to work"

        else:

            print "play games"

            

class Friend(Observer):

    def update(self,subject):

        if subject.status == True:

            print"tell others boss is coming"

        else:

            print"keep eyes on the door"

            

class MixedIn:

    pass

            

if __name__ == '__main__':

    me = Programmer()

    myfriend = Friend()

    mixed = MixedIn()

    boss = Boss()

    boss.attach(me)

    boss.attach(myfriend)

    boss.attach(mixed)

    

    boss.status = True

    boss.status = False

    

    

往高手指点~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值