'''
OBSERVER――观察者模式?
容:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。观察者模式又称“发布-订阅”模式
角色:
抽象主题(Subject)
具体主题(ConcreteSubject)――发布者
抽象观察者(Observer)
具体观察者(ConcreteObserver)――订阅者
适用场景:
当一个抽象模型有两方面,其中一个方面依赖于另一个方面。将这两者封装在独立对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。
优点:
目标和观察者之间的抽象耦合最小
支持广播通信
缺点:
多个观察者之间互不知道对方存在,因此一个观察者对主题的修改可能造成错误的更新
'''
#====================1=========================
# from abc import ABCMeta,abstractmethod
#
# class Observer(metaclass=ABCMeta):
#
# class Notice(object):
#
#
#
#
#
# class ManagerNotice(Notice):
#
#
# class Manager(Observer):
#
#
#
# notice=ManagerNotice()
# alex=Manager()
# wusir=Manager()
#
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.attach(alex)
# notice.attach(wusir)
#
# notice.company_info="公司运行良好"
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.company_info="公司即将上市"
# print(alex.company_info)
# print(alex.company_info)
#
# notice.detach(wusir)
#
# notice.company_info="公司要破产了,赶紧跑路"
#
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.company_info="公司已经破产了"
#
# print(alex.company_info)
# print(wusir.company_info)
#==================2===============================
from abc import ABCMeta
from abc import abstractmethod
class Observer(metaclass=ABCMeta):
class Notice(object):
class ManagerNotice(Notice):
class Manager(Observer):
notice=ManagerNotice()
alex = Manager()
wusir = Manager()
print(alex.company_info)
print(wusir.company_info)
notice.attach(alex)
notice.attach(wusir)
notice.company_info = "公司运行良好"
print(alex.company_info)
print(wusir.company_info)
notice.company_info = "公司将要上市"
print(alex.company_info)
print(wusir.company_info)
notice.detach(wusir)
notice.company_info = "公司要破产了,赶快跑路"
print(alex.company_info)
print(wusir.company_info)
notice.company_info = "公司已经破产了"
print(alex.company_info)
print(wusir.company_info)
OBSERVER――观察者模式?
容:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。观察者模式又称“发布-订阅”模式
角色:
抽象主题(Subject)
具体主题(ConcreteSubject)――发布者
抽象观察者(Observer)
具体观察者(ConcreteObserver)――订阅者
适用场景:
当一个抽象模型有两方面,其中一个方面依赖于另一个方面。将这两者封装在独立对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。
优点:
目标和观察者之间的抽象耦合最小
支持广播通信
缺点:
多个观察者之间互不知道对方存在,因此一个观察者对主题的修改可能造成错误的更新
'''
#====================1=========================
# from abc import ABCMeta,abstractmethod
#
# class Observer(metaclass=ABCMeta):
#
# class Notice(object):
#
#
#
#
#
# class ManagerNotice(Notice):
#
#
# class Manager(Observer):
#
#
#
# notice=ManagerNotice()
# alex=Manager()
# wusir=Manager()
#
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.attach(alex)
# notice.attach(wusir)
#
# notice.company_info="公司运行良好"
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.company_info="公司即将上市"
# print(alex.company_info)
# print(alex.company_info)
#
# notice.detach(wusir)
#
# notice.company_info="公司要破产了,赶紧跑路"
#
# print(alex.company_info)
# print(wusir.company_info)
#
# notice.company_info="公司已经破产了"
#
# print(alex.company_info)
# print(wusir.company_info)
#==================2===============================
from abc import ABCMeta
from abc import abstractmethod
class Observer(metaclass=ABCMeta):
class Notice(object):
class ManagerNotice(Notice):
class Manager(Observer):
notice=ManagerNotice()
alex = Manager()
wusir = Manager()
print(alex.company_info)
print(wusir.company_info)
notice.attach(alex)
notice.attach(wusir)
notice.company_info = "公司运行良好"
print(alex.company_info)
print(wusir.company_info)
notice.company_info = "公司将要上市"
print(alex.company_info)
print(wusir.company_info)
notice.detach(wusir)
notice.company_info = "公司要破产了,赶快跑路"
print(alex.company_info)
print(wusir.company_info)
notice.company_info = "公司已经破产了"
print(alex.company_info)
print(wusir.company_info)
文章来源: 观察者模式