观察者模式

观察者模式
行为模式

设计时设计成可以取消订阅
当发布者状态改变时 所有依赖他的订阅者都得到通知并被自动更新
观察者模式又称 发布-订阅 模式

from abc import ABCMeta, abstractmethod


# 抽象 观察者 订阅者
class Observer(metaclass=ABCMeta):
    @abstractmethod
    def update(self, notice):  # notice 是 Notice 的一个对象
        # 发布者状态发生改变时 更新
        pass


# 抽象 发布者 主题 订阅关系不能写死
class Notice:
    def __init__(self):
        self.observers = []  # 存储所有订阅者

    def attach(self, obs):
        # 订阅
        self.observers.append(obs)

    def detach(self, obs):
        # 取消订阅
        self.observers.remove(obs)

    def notify(self):
        # 发布
        for obs in self.observers:
            obs.update(self)


# 具体发布者 主题
class StaffNotice(Notice):
    def __init__(self, company_info=None):
        super().__init__()
        self.__company__info = company_info

    @property
    def company_info(self):
        return self.__company__info

    @company_info.setter
    def company_info(self, info):
        self.__company__info = info
        self.notify()


# 具体 观察者 订阅者
class Staff(Observer):
    def __init__(self):
        self.company_info = None

    def update(self, notice):
        self.company_info = notice.company_info


notice = StaffNotice('初始公司信息')
s1 = Staff()
s2 = Staff()
notice.attach(s1)
notice.attach(s2)
notice.company_info = 'HiHiHi'
print(s1.company_info)

输出

HiHiHi
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇