设计模式之黑板模式

黑板模式属于新模式。

黑板模式的定义

黑板模式是观察者模式的扩展,一种常用的架构模式。黑板模式的定义如下:

允许消息的读写同时进行,广泛地交互消息。

黑板模式允许多个消息读写着同时存在,应用中的多种不同数据处理逻辑相互影响和协同来完成数据分析处理。就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家。

《设计模式之黑板模式》

黑板架构风格

黑板架构包括知识源、黑板和控制3个部分。知识源包括若干独立计算的不同单元,提供解决问题的知识,知识源响应黑板上的变化,也只修改黑板。黑板是一个全局数据库,包含解域的全部状态,是知识源互相作用的唯一媒介。知识源响应是通过黑板状态的变化来控制。黑板通常应用在对于解决问题没有确定性算法的系统中,例如信号处理、问题规划及编译器优化等软件系统的设计中。

这种模式对于没有确定解决方案策略的问题是有用的。黑板模式由3个主要组成部分组成。

  • 黑板:包含来自解决方案空间的对象的结构化全局内存
  • 知识源:专门的模块和它们自己的表示
  • 控制组件:选择、配置和执行模块

《设计模式之黑板模式》

所有的组件都可以访问黑板。组件可以生成添加到黑板上的新数据对象。组件在黑板上查找特定类型的数据,并通过与现有知识源的模式匹配来查找这些数据。

应用场景

黑板模式解决没有确定可行的解决方案,将原始数据转换为高级数据结构(图表或英语词组)。存在这些问题的领域包括视觉识别,图像识别,语音识别和监视等。这种问题具体如下特点:可分解成多个子问题,但每个子问题都属于不同的专业领域。

对于这种问题,影响其解决方案的作用力如下:

  1. 不可能在合理的时间内遍历整个解空间;
  2. 鉴于领域不成熟,可能需要对同一个子任务尝试不同的算法;
  3. 子问题的算法各不相同;
  4. 输入,中间结果和最终结果的表示方式各不相同,而不同算法是根据不同范式实现的;
  5. 一个算法通常使用另一个算法的结果;
  6. 涉及不可靠的数据和近似解;
  7. 算法的执行顺序不确定时还可能要求支持并行性。

可解决的问题:可分解成多个子问题,但每个子问题都属于不同的专业领域。

解决方案:黑板模式正是来解决这种问题的,黑板模式就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家,正好解决了可分解成多个子问题,但每个子问题都属于不同的专业领域的问题。

数据库作为黑板

利用数据库充当黑板,生产者更新数据信息,不同的消费者共享数据库中信息,这是最常见的实现方式。该方式在技术上容易实现,开发量较少,熟悉度较高。缺点是在大量消息和高频率访问的情况下,性能会受到一定影响。

在该模式下,消息的读取是通过消费者主动“拉取”,因此该模式也叫做“拉模式”。

消息队列作为黑板

以消息队列作为黑板,通过订阅-发布模型即可实现黑板模式。这也是黑板模式被淡忘的一个重要原因:消息队列(MessageQueue)已经非常普及了,它既可以做到消息的同步处理,也可以实现异步处理,相信大家已经在开发中广泛使用了,已经成为跨系统交互的一个事实标准了。

在该模式下,消费者接收到的消息是被主动推送过来的,因此该模式也称为“推模式”。

总结

本文主要简单介绍了黑板模式,黑板模式是一种常用的架构模式,应用中的多种不同数据处理逻辑相互影响和协同来完成数据分析处理。黑板模式的优点在于:可用于非确定性问题求解,启发式解决过程,可维护性、可重用。但其不能确保期望结果,效率低下,回退,不支持并行,共享空间的访问需要同步。

其实我们已经在大量使用消息队列,既可以做到消息的同步处理,也可以实现异步处理,在开发中广泛使用了。

订阅最新文章,欢迎关注我的公众号

《设计模式之黑板模式》

参考

  1. 设计模式之禅
  2. 软件架构之黑板模式
    原文作者:算法小白
    原文地址: https://juejin.im/entry/5c2e1721e51d4535296281b5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞