美文网首页
观察者模式_20190912(python)

观察者模式_20190912(python)

作者: bonnie_xing | 来源:发表于2020-08-21 16:28 被阅读0次

一、观察者模式介绍

image.png

二、观察者模式UML

image.png

三、python实现观察者模式(demo1、2)

1、demo1

"""
"""
观察者模式
"""

class Subject(object):
def init(self):
self.__observers = []

def register(self, observer):
    self.__observers.append(observer)

def notifyAll(self, *args, **kwargs):
    for observer in self.__observers:
        observer.notify(self, *args, **kwargs)

class Observer1(object):
def init(self, subject):
subject.register(self)

def notify(self, subject, *args):
    print(type(self).__name__, ":: Got", args, "From", subject)

class Observer2(object):
def init(self, subject):
subject.register(self)

def notify(self, subject, *args):
    print(type(self).__name__, ":: Got", args, "From", subject)

if name == "main":
subject = Subject()
observer1 = Observer1(subject)
observer2 = Observer2(subject)

subject.notifyAll('notification')

"""

2、demo2

"""
"""
观察者模式:新闻内容订阅和通知
"""
from abc import ABCMeta, abstractmethod

subject

class NewsPublisher(object):
def init(self):
self.__subscribers = []
self.__latestNews = None

def attach(self, subscriber):
    self.__subscribers.append(subscriber)

def detach(self):
    return self.__subscribers.pop()

def get_subscribers(self):
    return [type(x).__name__ for x in self.__subscribers]

def notifySubscribers(self):
    for sub in self.__subscribers:
        sub.update()

def addNews(self, news):
    self.__latestNews = news

def getNews(self):
    return "Got News: ", self.__latestNews

observer

class Subscriber(metaclass=ABCMeta):
@abstractmethod
def update(self):
pass

class SMSSubscriber(Subscriber):
def init(self, publisher):
self.publisher = publisher
self.publisher.attach(self)

def update(self):
    print(type(self).__name__, self.publisher.getNews())

class EmailSubscriber(Subscriber):
def init(self, publisher):
self.publisher = publisher
self.publisher.attach(self)

def update(self):
    print(type(self).__name__, self.publisher.getNews())

class OtherSubscriber(Subscriber):
def init(self, publisher):
self.publisher = publisher
self.publisher.attach(self)

def update(self):
    print(type(self).__name__, self.publisher.getNews())

client

if name == "main":
news_publisher = NewsPublisher()
for subscriber in [SMSSubscriber, EmailSubscriber, OtherSubscriber]:
subscriber(news_publisher)
print("\n Subscribers: ", news_publisher.get_subscribers())

news_publisher.addNews("Hello world! ")
news_publisher.notifySubscribers()

print("\n Detached: ", type(news_publisher.detach()).__name__)
print("\n Subscribers: ", news_publisher.get_subscribers())

news_publisher.addNews("Second News! ")
news_publisher.notifySubscribers()

"""

相关文章

  • 观察者模式_20190912(python)

    一、观察者模式介绍 二、观察者模式UML 三、python实现观察者模式(demo1、2) 1、demo1 """...

  • 2017-12-26

    今天黄老师讲解了python观察者模式,观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观...

  • 2017-12-27

    今天上午黄老师主要讲解他的项目,用python讲解了观察者模式。实现观察者模式的时候要注意,观察者和被观察对象之间...

  • python设计模式

    观察者模式 python观察者模式是一种设计模式需求:员工上班在偷偷看股票,拜托前台一旦老板进来,就通知他们,让他...

  • Python观察者模式

    [python|高级篇|笔记|设计模式|观察者模式] 这两天读了[Head First设计模式][1]和[Pyth...

  • 12.27

    今天老师主要还是讲解他的项目 依然用python讲解了观察者模式。观察者模式就是有一块公共数据中心(函数),各个模...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • 2017年12月27日学习总结

    今天上午黄老师主要还是讲解他的项目 依然用python讲解了观察者模式。观察者模式就是有一块公共数据中心(函数),...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

网友评论

      本文标题:观察者模式_20190912(python)

      本文链接:https://www.haomeiwen.com/subject/pjkgyctx.html