深入理解编程艺术之策略与机制相分离
以下文章来源于极客重生 ,作者极客重生
在现代操作系统的结构设计中,经常利用“机制与策略分离”的原理来构造OS结构。所谓机制,是指实现某一功能的具体执行机构。而策略,则是在机制基础上,借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。通常,机制处于一个系统的基层,而策略则处于系统的高层。
一些例子
GUI框架
MVC(Model-View-Controller)作为经典的GUI架构,MVC模式的核心思想是数据层(Domain)与表现层(Presentation)的隔离。
模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,从而,View 可以了解在数据 Model 上发生的改变。 视图(View)能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。 控制器(Controller)起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。
内核实现BPF虚拟机执行核心引擎,属于机制部分;
用户态可以编写各种BPF程序,实现不同策略功能;
游戏引擎
游戏引擎架构
后一些问题
1、透过现象看本质,机制与策略到底是什么?为什么要将机制与策略分离?
机制可以认为是业务通用的核心模型(框架),不易变化;策略可以认为是某个功能的具体实现方案,可以被框架使用;机制与策略分离,是一种可扩展性设计的重要方法,提供一个继承接口,用于提供不同的实现,这也就是策略模式和接口隔离原则。机制关联一个抽象的策略(也就是接口),用不同的具体策略初始化抽象策略,就能调用具体策略的处理流程。
2、假如不分离,会出现什么问题?
把策略同机制揉成一团有两个负面影响:一来会使策略变得死板,难以适应用户需求的改变,二来也意味着任何策略的改变都极有可能动摇机制,对原来稳定的框架造成污染,引入风险。
参考和扩展阅读
https://web.archive.org/web/20050306210911/http://www.faqs.org/docs/artu/ch01s06.html#id2877777
https://qcc107.github.io/2015/09/01/UNIX%E7%BC%96%E7%A8%8B%E8%89%BA%E6%9C%AF%E4%B9%8B%E7%AD%96%E7%95%A5%E4%B8%8E%E6%9C%BA%E5%88%B6%E7%9B%B8%E5%88%86%E7%A6%BB/#:~:text=%E6%89%80%E8%B0%93%E6%9C%BA%E5%88%B6%EF%BC%8C%E6%98%AF%E6%8C%87%E5%AE%9E%E7%8E%B0,%E5%86%85%E8%81%9A%E4%BD%8E%E8%80%A6%E5%90%88%E6%80%A7%E3%80%82
- EOF -
相关文章