色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

State狀態模式推導過程以及完整實現

UtFs_Zlgmcu7890 ? 來源:互聯網 ? 作者:佚名 ? 2017-10-17 06:42 ? 次閱讀

近日周立功教授公開了數年的心血之作《程序設計與數據結構》,電子版已無償性分享到電子工程師與高校群體下載,經周立功教授授權,特對本書內容進行連載。

>>>1.1.1動作類

前面詳細介紹了State狀態模式的推導過程以及完整的實現,采用了簡單的打印語句作為作為4個動作的實現示例。然而,實際動作是很有可能發生變化的,由于動作直接在事件處理方法中執行。比如,LOCKED狀態的card事件處理方法定義為:

1 void locked_card(turnstile_t *p_turnstile)

2 {

3 turnstile_state_set(p_turnstile, &unlocked_state);

4 printf("unclock\n"); // 執行unlock動作

5 }

由此可見,只要動作發生變化,都必須修改事件處理方法。基于此,不妨將閘機動作單獨封裝在一個動作類中,詳見圖 4.12

圖 4.12 狀態機類圖

程序清單4.23程序清單4.24所示為動作類的聲明和實現,為何要為這么簡單的動作創建類呢?因為只有預測變換和管理變化才能擁抱變化,只有這樣才能使軟件具有可擴展性和可維護性。

程序清單4.23動作函數聲明(turnstile_action.h文件內容

1 #pragma once

2

3 void turnstile_action_lock(void);

4 void turnstile_action_unlock(void);

5 void turnstile_action_alarm(void);

6 void turnstile_action_thankyou(void);

程序清單4.24動作函數實現(turnstile_action.c文件內容)

1 void turnstile_action_lock(void)

2 {

3 printf("clock\n");

4 }

5

6 void turnstile_action_unlock(void)

7 {

8 printf("unclock\n");

9 }

10

11 void turnstile_action_alarm(void)

12 {

13 printf("alarm\n");

14 }

15

16 void turnstile_action_thankyou(void)

17 {

18 printf("thank you\n");

19 }

程序中的alarm、unlock、thankyou和lock動作對應的動作函數分別為: alarm()、unlock()、thankyou()和lock()。當將4個動作分別由4個函數實現時,則具體動作從狀態機中分離出來了。比如,LOCKED狀態下的card事件處理方法定義為:

1 void locked_card(turnstile_t *p_turnstile)

2 {

3 turnstile_state_set(p_turnstile, &unlocked_state);

4 turnstile_action_unlock (); // 執行unlock動作

5 }

這是一種良好的設計因為動作接口優雅地解除了FSM的狀態變換邏輯和它要執行的動作之間的耦合。這樣一來就算另外一個具有完全不同邏輯的FSM,也可以在沒有任何影響的情況下使用這些動作接口。

由于在處理動作時,不需要任何數據,它是一個只有方法,沒有屬性的動作類,因此沒有刻意使用結構體為其定義專門的類型。而實際的動作類可能會包含一些數據,其定義如下:

typedef struct _turnstile_action {

// some data

} turnstile_action_t;

此時,當動作發生變化時,僅需修改動作類的函數,無需修改狀態機的事件處理函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電子工程師
    +關注

    關注

    252

    文章

    768

    瀏覽量

    95645
  • 嵌入式
    +關注

    關注

    5086

    文章

    19140

    瀏覽量

    305882
  • 周立功
    +關注

    關注

    38

    文章

    130

    瀏覽量

    37664

原文標題:周立功:狀態機——動作類

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    在Compose中使用狀態(State)

    對于開發者來說,狀態 (State) 指應用中可以隨時間變化的任何值。我們的應用天然便是擁有狀態的,無論您將數據存儲在本地還是服務器中,狀態都可以使這些數據更有價值。接下來,我們就以應
    的頭像 發表于 04-21 11:05 ?4875次閱讀

    狀態機編程實例-面向對象的狀態設計模式

    本編介紹了狀態機編程的第3種方法——面向對象的狀態設計模式,通過C++的繼承特性,以及類指針,實現炸彈拆除小游戲中的
    的頭像 發表于 06-28 09:04 ?1541次閱讀
    <b class='flag-5'>狀態</b>機編程實例-面向對象的<b class='flag-5'>狀態</b>設計<b class='flag-5'>模式</b>

    玩轉Spring狀態

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式狀態模式的區別是啥呢?沒錯,Spring
    的頭像 發表于 06-25 14:21 ?967次閱讀
    玩轉Spring<b class='flag-5'>狀態</b>機

    誰有PMSM傳遞函數的推導過程的資料?

    誰有PMSM傳遞函數的推導過程的資料?發一下謝謝了PMSM的FOC控制中電流環的PI控制器的時候,好多資料上就干巴巴列出了一個現成的PMSM的傳遞函數,看的暈頭轉向的,有沒有簡單的推導過程
    發表于 01-21 16:13

    經驗分享:臨界模式下的PFC電感量推導過程

    臨界模式PFC電感量計算真的非常簡單!對于很多工程師來說開關電源PFC電感的計算比較懵,今天我對臨界模式下的PFC做了一下簡單的推導,我覺得比反激正激變壓器要更好更容易計算,也更好理解。好了我們一起
    發表于 04-28 08:00

    LLC增益曲線過程推導和參數如何計算

    詳細過程在PDF中,這里就不一一展示了。直流增益公式推導直流LLC諧振電源,其實也相當于buck-boost電源。要想弄明白和推導理論公式,首先溫習一下傅里葉級數和RLC串聯諧振知識。 傅里葉級數
    發表于 05-19 09:19

    直線擬合求解的推導過程

    (1)求解的推導過程:最小二乘擬合直線的推導過程如下:假設直線方程為:設有n對觀測值(xi,yi),則列出如下方程:整理得:其中A、EA、L的表達式如下:最后解算直線擬合求解的
    發表于 08-18 08:04

    State Machine Coding Styles for Synthesis

    本文論述了狀態機的verilog編碼風格,以及不同編碼風格的優缺點, Steve Golsons 1994 paper, State Machine Design Techniques
    發表于 01-17 11:22 ?0次下載
    <b class='flag-5'>State</b> Machine Coding Styles for Synthesis

    對象間交互推導過程模式選擇

    的對象間交互 基于閉包的對象間交互 推導過程 總結 前言 閉包在什么場景下才是最優選擇?理由?補充說明一下:很多場景都適用閉包,但不是所有場景下閉包都是最優選擇。 這篇文章主要就是回答這個問題的。 但是在直接切入閉包之前,我們需要有一個
    發表于 09-25 15:26 ?0次下載

    Logistic回歸數學推導以及python實現

    Logistic回歸數學推導以及python實現
    發表于 02-25 14:48 ?7次下載

    反激詳細推導過程

    反激電路工作模式一般有三種,斷續模式(DCM),連續模式(CCM),臨界模式(CRM)以下的推導公式,前期條件是你必須認識到反激變壓器他的本
    發表于 06-19 10:20 ?39次下載

    電機控制---SVPWM扇區判斷的實現以及推導過程

    電機控制—SVPWM扇區判斷的實現以及推導過程 1.一般的Svpwm模塊中,輸入量為Vα、Vβ,得到三相計數器的Compare的值,最后輸出U、V、W三相電壓。在FOC控制中實現Svp
    發表于 05-05 11:05 ?5次下載
    電機控制---SVPWM扇區判斷的<b class='flag-5'>實現以及</b><b class='flag-5'>推導</b><b class='flag-5'>過程</b>

    設計模式行為型:狀態模式

    狀態模式State Pattern)中,類的行為是基于它的狀態改變的。這種類型的設計模式屬于行為型
    的頭像 發表于 06-07 11:20 ?627次閱讀
    設計<b class='flag-5'>模式</b>行為型:<b class='flag-5'>狀態</b><b class='flag-5'>模式</b>

    UVM設計模式狀態模式介紹

    軟件設計中,FSM(Finite-State Machine)分為3部分:狀態State),事件(Event),動作(Action)。
    的頭像 發表于 08-22 09:14 ?1034次閱讀
    UVM設計<b class='flag-5'>模式</b>之<b class='flag-5'>狀態</b><b class='flag-5'>模式</b>介紹

    buck電路穩態電壓推導過程

    buck電路(也稱為降壓轉換器或降壓穩壓器)的穩態電壓推導過程涉及理解其工作原理以及電路中的電壓和電流關系。以下是一個簡化的推導過程: Bu
    的頭像 發表于 09-12 15:24 ?704次閱讀
    主站蜘蛛池模板: 在线二区 中文 无码| 亚洲最大成人| 无人影院在线播放视频| 6080伦理久久亚洲精品| 极品少妇高潮XXXXX| 亚洲 欧美 国产 综合 在线| 吃奶摸下的激烈免费视频| 女女破视频在线观看| 中文字幕久久熟女人妻AV免费| 精精国产www视频在线观看免费| 午夜影院老司机| 国产精品视频第一区二区三区| 99re久久热免费视频| 久久久99精品成人片中文| 日本片bbbxxx| yellow在线观看免费高清的日本 | 女攻男受高h全文肉肉| 中国毛片网| 女生扒开尿口| 超碰人热人人热人人看| 三级黄在线播放| 国产1广场舞丰满老女偷| 无羞耻肉动漫在线观看| 国产探花在线精品一区二区| 亚洲精品婷婷无码成人A片在线 | 亚洲视频一| 老阿姨才是最有V味的直播| 中文字幕免费在线视频| 免费在线视频成人| 大肥婆丰满大肥奶bbw肥| 午夜影院老司机| 含羞草传媒在线观看| 最近中文字幕2019国语4| 欧美精品一区二区三区四区| 国产高潮国产高潮久久久久久| 羞羞答答dc视频| 久久AV国产麻豆HD真实| a在线视频免费观看| 世界第一黄暴漫画家| 精品免费在线视频| YELLOW视频在线观看免费版高清|