以前我经常搞不清生产/消费和订阅/发布的区别。消息和事件的区别。因为在我看来这几种模式的行为都差不多。今天就把这几个区别稍微理一下。
伪代码中带#的算作隐含步骤。根据实际逻辑,可能会忽略,但实际上还存在这样的过程。
生产/消费
举个例子:
小明的妈妈做饭,小明家人吃饭
生产者:小明妈妈
产品:饭菜
消费者:小明家人
代码如下
生产者 = new 生产者()
消费者 = new 消费者()
产品 = 生产者->生产产品()
# 这里有一个隐含逻辑, 生产者并没有把产品交给消费者,而是消费者主动获取的
# 因为代码过于简单,所以没体现出来
消费者->消费(产品)
从上述代码中能看到3个角色
- 生产者,具有生产产品的方法
- 消费者,具有消费产品的方法
- 产品
由此可以提取出两个接口和一个抽象
- 返回产品的生产接口
- 把产品作为参数的消费接口
- 产品抽象
最后可以得到如下定义
- 具备生产接口的对象都可以叫做生产者
- 具有消费接口的对象都可以叫做消费者
- 生产者和消费者 的产品对象的抽象一样的情况,就叫做生产/消费模式
生活永远会有不一样的情况
如下例子
手机公司生产手机,并把手机放到了商店进行售卖
小明从商店购买了手机
生产者&