mvc参数传值 应用面向对象编程SoC原则的典型示例(4)

电脑杂谈  发布时间:2018-02-05 18:03:21  来源:网络整理

虽然 LED 和 zigbee 属于不同类型的对象,且它们的显示函数也不一样,但它们共同的概念是“视图”和“显示函数”。LED 具有“编号(led_id)”属性,比如,LED0 的编号“0”用 led_id 表示,而 zigbee 具有“实例句柄(zm516x_handle)”属性,通过实例句柄即可进行数据的收发。因此将共同的概念用抽象类 observer_t 表示,其中的属性通过具体类 view_led_t和 view_zigbee_t 实现。

虽然 value 是一个 am_bool_t 值,可以将它归类到业务逻辑,但同样要对它建模,创建相应的基类 model_t 和具体类 model_bool_t,而 value 是model_bool_t 的属性。

下一步是寻找类间的关联,两个或多个类之间的结构化关系就是关联,从一个类到另一个类的引用也是关联,因此 model_t 与 observer_t 是一对多的关系。接着使用继承共享公共结构组织类,其相应的类模型详见图 9.12。

图 9.12 类模型

2. 交互模型

显然有了类,即可创建模型对象model_bool 与视图对象 view_led0 和view_zigbee。由于视图需要知道如何调用显示函数,因此将通过在类中定义方法表示这些职责。当模型对象的状态变化时,需要调用视图对应的显示函数 view_update 才能更新显示内容。虽然不同视图(LED 视图、zigbee视图)的显示函数的实现不一样(LED 亮灭、zigbee 发送“0”或“1”),但其共性是“显示函数”,因此可以共用 pfn_update_view 函数指针调用显示函数。

如图 9.13 所示的类-职责-协作序列图展示了 model_bool、view_led0 和 view_zigbee 对象之间的消息流和由消息引起的方法调用。

图 9.13 类-职责-协作序列图

当有键按下时,即可调用 model_bool_set()修改模型对象的 value 值。当模型对象 value值改变后,调用 model_notify()遍历视图对象链表通知所有的视图,即调用视图显示函数pfn_update_view()。视图对象在 pfn_update_view()函数的实现中,调用 model_bool_get()从模型对象中获取 value 值,以便更新显示内容。

>>> 9.3.4 子系统体系结构

集成通信图是所有开发用于支持用例的通信图的合成,其形象地描述了对象之间的相互连接以及所传递的消息。通常不同用例之间存在执行的优先顺序,通信图合成的顺序应该与用例执行的顺序一致,MVC 框架的子系统接口图详见图 9.14。

图 9.14 子系统接口图

按键

当 key1 键按下时,则布尔模型的值发生改变。首先通过 model_bool_get()得到当前的布尔值,接着将该布尔值取反,然后调用 model_bool_set()将取反后的布尔值重新设置到布尔模型中。

布尔模型

布尔模型负责维护一个布尔值,外界可以通过 model_bool_set()设置布尔值,也可以通过 model_bool_get()获取布尔值。当布尔值发生改变时,布尔模型将依次调用各个视图的显示更新函数 pfn_update_view()通知各个视图更新显示,各视图根据自身功能决定显示方式。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-65228-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...