上文提到了生产者和消费者角色。生产者和消费者是针对类型而言的。一旦确定了生产者和消费者角色,后续编码过程中使用的调用方式也就严格确定了,如果消费者需要调用生产者,就直接使用方法调用;如果生产者需要调用消费者的某些功能,则需要使用委托或事件进行回调。
由此而看,当生产者和消费者互相作用,以完成一项操作时,存在两种方式——调用或回调。当采用方法调用完成一个操作时,我们成这种模式为“Pull模式”;而当采用回调完成一个操作时,我们成这种模式为“Push模式”。
前文提到了WinForm的例子,在窗体中使用控件时,控件类型是生产者,而窗体类则是消费者。以Button类和MyForm(继承自Form类)为例。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)