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

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

程序清单 9.64 model_bool_init()模型初始化函数

由于布尔模型维护了一个 am_bool_t 类型 value 值,因此需要提供设置和获取 value 值的接口。model_bool_set()用于设置布尔模型当前的布尔值,比如,当有键按下时,可以使用该接口修改布尔模型的值。在设置布尔模型的值时,可能会使布尔模型的值发生变化。当value 值改变时,视为布尔模型的状态发生变化,此时需要调用 model_notify()通知所有的视图。如果布尔值未发生任何改变,则无需做任何实际动作。其函数原型如下:

其中,p_this 指向模型对象,value 为设置的当前值,设置布尔模型当前值 value 的范例程序详见程序清单 9.65。

程序清单 9.65 设置布尔模型当前值 value 的范例程序

model_bool_set()函数的实现详见程序清单 9.66。

程序清单 9.66 model_bool_set()函数

类似地,model_bool_get()用于获取布尔模型当前的布尔值,比如,当布尔模型的值发生变化时,模型会通知所有的视图更新显示。此时,在视图显示函数中,则需要调用该函数得到当前最新的布尔值,同步更新显示。获取 value 当前值的函数原型如下:

其中,p_this 指向模型对象,p_value 为获取当前值的指针,获取布尔模型当前值的范例程序详见程序清单 9.67。

程序清单 9.67 获取布尔模型当前值的范例程序

model_bool_get()函数的实现详见程序清单 9.68。

程序清单 9.68 model_bool_get()函数

为了便于查阅,程序清单 9.69 展示了 model_bool.h 文件的内容。

程序清单 9.69 model_bool.h 文件内容

(2)具体视图

由于具体视图类实现了 observer_t 接口,因此具体视图还必须实现在抽象视图 observer_t中定义的 update 方法,即要给抽象视图中的 pfn_update_view 函数指针赋值,使其指向实际的 update 函数。

当布尔模型的数据发生变化时,视图显示函数需要调用 model_bool_get()获取最新的布尔值。当获取布尔值后,即可根据具体视图的实际功能同步显示相应的数据。

对于 LED 视图来说,则将观察到的 bool 值通过 LED 显示出来。即 bool 值为 AM_FALSE时 LED 熄灭,bool 值为 AM_TRUE 时 LED 点亮;对于 zigbee 视图来说,则将观察到的 bool值通过 zigbee 发送出去,即 bool 值为 AM_FALSE 时 zigbee 发送“0”,bool 值为 AM_TRUE时 zigbee 发送“1”。

LED 视图

LED 视图继承自抽象视图,同时具有一个私有数据成员 led_id,用于表示 LED 灯的 ID号,LED 视图定义如下:

其中的 led_id 为 LED 的下标编号。LED 视图类 view_led_t 实现了 observer 接口,其对应的类图详见图 9.22。

图 9.22 LED 视图类

显然有了 LED 视图,即可定义相应的视图对象,当将view_led的地址传给形参p_view_led后:

即可按 p_view_led 的指向引用其它成员。

接着初始化视图对象,显然只要将 view_led、led_id 值传递给 view_led_init()函数,即可初始化 LED 视图对象,其函数原型(view_led.h)如下:


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

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

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