1、生产者基类(父类)
代码语言:javascript复制class BaseProducer(object):
'''
生产者
'''
def __init__(self,name):
'''
初始化生产对象
:param name:生产名称
'''
self.name = name
self.number = 0
self.object = None
def action(self):
'''
抽象方法:生产方法
:return:
'''
pass
def action(self,number,object):
'''
带参的生产方法:根据数量和对象生产不同的产品
:param number:生产数量
:param object:生产产品
:return:
'''
self.number = number
self.object = object
while number > 0:
obj = object()
list.append(obj)
number -= 1
return list
def __str__(self):
'''
生产者的toString方法
:return:
'''
return "生产名称:" self.name "t生产数量:" str(self.number) "t生产对象:" str(self.object)
2、消费者基类(父类)
代码语言:javascript复制class BaseConsumer(object):
'''
消费者
'''
def __init__(self,name):
'''
初始化消费者对象
:param name:消费者名称
'''
self.name = name
def action(self,object):
'''
消费者消费动作
:param object:消费物品
:return:
'''
pass
3、根据业务模拟编写生产者消费者
代码语言:javascript复制import Queue
from base_producer import BaseProducer
from base_consumer import BaseConsumer
class WebProducer(BaseProducer):
# def __init__(self,name):
# self.name = name
def action(self, number, object):
'''
根据数量和对象生产不同的产品
:param number:生产数量
:param object:生产产品
:return:
'''
self.number = number
list = []
while number > 0:
obj = object()
list.append(obj)
number -= 1
return list
class WebConsumer(BaseConsumer):
def __init__(self, name):
self.name = name
def action(self, object):
for i in object:
# 打印输出生产者
print(i)
class A():
'''
用于测试的具体消费类
'''
pass
if __name__ == '__main__':
# 定义一个队列对象,用于中间缓存
queue = Queue.Queue()
# new 一个生产者
producer = WebProducer("生产者1")
# 执行生产动作,放回产品列表
list = producer.action(10, A)
print(producer.__str__())
# 把生产的产品放到队列中
queue.put(list)
# new 一个消费者
consumer = WebConsumer("消费者1")
# 消费者从队列中消费产品
list = queue.get()
print(list)
if None is not list:
consumer.action(list)
else:
print("No producet consumption for the time being!")
4、运行结果
5、总结
其实发布订阅者模式就是生产者消费者模式,
区别在于发布订阅者多了一个中间队列,
生产者生产产品,放到队列中,消费者从队列中取出产品消费。