嵌入式中设计模式的艺术
扫描二维码
随时随地手机看文章
设计模式设计模式的标签:高级语言 ,高端,架构等。在AIOT时代,设计模式与嵌入式能擦出怎样的火花?设计模式可描述为:对于某类相似的问题,经过前人的不断尝试,总结出了处理此类问题的公认的有效解决办法。嵌入式主要以C语言开发,且面向过程,而设计模式常见于高级语言(面向对象),目前市面上描述设计模式的书籍多数使用JAVA 语言,C语言能实现设计模式吗?设计模式与语言无关,它是解决问题的方法,JAVA可以实现,C语言同样可以实现。同样的,JAVA程序员会遇到需要用模式来处理的问题,C程序员也可能遇见,因此设计模式是很有必要学习的。模式陷阱:设计模式是针对具体的某些类问题的有效解决办法,不是所有的问题都能匹配到对应的设计模式。因此,不能一味的追求设计模式,有时候简单直接的处理反而更有效。有的问题没有合适的模式,可以尽量满足一些设计原则,如开闭原则(对扩展开放,对修改关闭)
观察者模式
情景在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。实现主题对象提供统一的注册接口,以及注册函数 。由观察者本身实例化observer_intf 接口,然后使用注册函数,添加到对应的主题列表中,主题状态发生改变,依次通知列表中的所有对象。- struct observer_ops
- {
- void*(handle)(uint8_t evt);
- };
-
- struct observer_intf
- {
- struct observer_intf* next;
- const char* name;
- void* condition;
- const struct observer_ops *ops;
- }
-
- int observer_register(struct topical* top , struct observer_intf* observer);
当主题状态发生改变,将通知到所有观察者,观察者本身也可以设置条件,是否选择接收通知- struct observer_intf observer_list;
-
- void XXXX_topical_evt(uint8_t evt)
- {
- struct observer_intf* cur_observer = observer_list.next;
- uint8_t* condition = NULL;
- while(cur_observer != NULL)
- {
- condition = (uint8_t*)cur_observer->condition;
- if(NULL == condition || (condition