# 行为型模式
# 观察者模式 (Observer pattern)
在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新。
class Observer:
"""
观察者
"""
def __init__(self, name):
self.name = name
def update(self, msg):
print(self.name + "收到信息:" + msg)
class Subject:
"""
主题
"""
def __init__(self):
self.observers = []
def add_observers(self, observer):
self.observers.append(observer)
return self
def remove_observer(self, observer):
self.observers.remove(observer)
return self
def notify(self, msg):
for observer in self.observers:
observer.update(msg)
xiaoming = Observer("xiaoming")
lihua = Observer("lihua")
rain = Subject()
# 添加订阅
rain.add_observers(xiaoming)
rain.add_observers(lihua)
rain.notify("下雨了!")
# 取消订阅
rain.remove_observer(lihua)
rain.notify("打雷了!")
# 连接池模式
class QueueObject():
def __init__(self, queue, auto_get=False):
self._queue = queue
self.object = self._queue.get() if auto_get else None
def __enter__(self):
if self.object is None:
self.object = self._queue.get()
return self.object
def __exit__(self, type, value, traceback):
if self.object is not None:
self._queue.put(self.object)
self.object = None
def __del__(self):
if self.object is not None:
self._queue.put(self.object)
self.object = None
def main():
try:
import queue
except ImportError: # python 2.x compatibility
import Queue as queue
def test_object(queue):
queue_object = QueueObject(queue, True)
print('Inside func: {}'.format(queue_object.object))
sample_queue = queue.Queue()
sample_queue.put('yam')
with QueueObject(sample_queue) as obj:
print('Inside with: {}'.format(obj))
print('Outside with: {}'.format(sample_queue.get()))
sample_queue.put('sam')
test_object(sample_queue)
print('Outside func: {}'.format(sample_queue.get()))
if not sample_queue.empty():
print(sample_queue.get())
if __name__ == '__main__':
main()
更多设计模式:http://www.pythontip.com/pythonPatterns/
← 创建型模式