嵌入式中設計模式的藝術
設計模式設計模式的標簽:高級語言 ,高端,架構(gòu)等。在AIOT時代,設計模式與嵌入式能擦出怎樣的火花?設計模式可描述為:對于某類相似的問題,經(jīng)過前人的不斷嘗試,總結(jié)出了處理此類問題的公認的有效解決辦法。嵌入式主要以C語言開發(fā),且面向過程,而設計模式常見于高級語言(面向?qū)ο螅壳笆忻嫔厦枋鲈O計模式的書籍多數(shù)使用JAVA 語言,C語言能實現(xiàn)設計模式嗎?設計模式與語言無關,它是解決問題的方法,JAVA可以實現(xiàn),C語言同樣可以實現(xiàn)。同樣的,JAVA程序員會遇到需要用模式來處理的問題,C程序員也可能遇見,因此設計模式是很有必要學習的。模式陷阱:設計模式是針對具體的某些類問題的有效解決辦法,不是所有的問題都能匹配到對應的設計模式。因此,不能一味的追求設計模式,有時候簡單直接的處理反而更有效。有的問題沒有合適的模式,可以盡量滿足一些設計原則,如開閉原則(對擴展開放,對修改關閉)
觀察者模式
情景在對象之間定義一個一對多的依賴,當一個對象狀態(tài)改變的時候,所有依賴的對象都會自動收到通知。實現(xiàn)主題對象提供統(tǒng)一的注冊接口,以及注冊函數(shù) 。由觀察者本身實例化observer_intf 接口,然后使用注冊函數(shù),添加到對應的主題列表中,主題狀態(tài)發(fā)生改變,依次通知列表中的所有對象。- ?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);
當主題狀態(tài)發(fā)生改變,將通知到所有觀察者,觀察者本身也可以設置條件,是否選擇接收通知- ?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