層次狀態(tài)機(jī)的設(shè)計(jì)思想--Apple的學(xué)習(xí)筆記

一诚欠,前言

之前在搜索循環(huán)隊(duì)列的時(shí)候顽染,不小心搜索到了狀態(tài)機(jī)設(shè)計(jì)的書,作為c語言開發(fā)者轰绵,所謂的面向?qū)ο笠簿褪墙Y(jié)構(gòu)體當(dāng)做一個(gè)對象粉寞,所謂的繼承就是大結(jié)構(gòu)體打包小結(jié)構(gòu)體。然后c語言主要是面向過程的語言左腔,我以前以為只有復(fù)雜的邏輯才能使用狀態(tài)機(jī)唧垦,簡單的邏輯無法用狀態(tài)機(jī)設(shè)計(jì),看了這書后才發(fā)現(xiàn)所有功能都可以用狀態(tài)機(jī)來設(shè)計(jì)的液样。狀態(tài)機(jī)算是面向?qū)ο蟮脑O(shè)計(jì)业崖,然后此對象就是狀態(tài)。

二蓄愁,入門

我也曾經(jīng)用vb和c#和QT制作做計(jì)算器双炕,仔細(xì)回想下,我做的計(jì)算器只支持簡單的整數(shù)運(yùn)算撮抓,根本不算個(gè)計(jì)算器妇斤。看了此書后丹拯,才發(fā)現(xiàn)其實(shí)我根本不懂狀態(tài)機(jī)的設(shè)計(jì)站超,此書最重要讓我學(xué)習(xí)到的就是一個(gè)狀態(tài)機(jī)繼承的概念,之前看UML的設(shè)計(jì)中主要關(guān)注時(shí)序圖乖酬,沒有看狀態(tài)機(jī)死相,在UML就是叫層次狀態(tài)機(jī)。

三咬像,計(jì)算器的狀態(tài)機(jī)設(shè)計(jì)

把信號 PLUS 算撮,MINUS, MULTIPLY 和 DIVIDE合并成一個(gè)高級的信號 OPER (操作數(shù))县昂。這個(gè)變換避免了在兩個(gè)轉(zhuǎn)換(從 operand1 到opEntered 肮柜,和從 result 到 opEntered )上重復(fù)相同的觸發(fā)。


計(jì)算器狀態(tài)機(jī).png

不過倒彰,用戶希望能在任何時(shí)候取消并重新開始审洞。類似的,用戶希望能在任何時(shí)候關(guān)閉計(jì)算器待讳。在下圖的狀態(tài)圖用一種天真的方式加入了這些特征芒澜。一個(gè)較好的方法是把這些共同的狀態(tài)分解成一個(gè)更高一層的狀態(tài) on仰剿,并讓所有的子狀態(tài)通過行為繼承來重用 Cancel 和 OFF 轉(zhuǎn)換。這就是層次狀態(tài)機(jī)可以繼承父類狀態(tài)機(jī)的所有屬性痴晦。


計(jì)算器狀態(tài)機(jī)2.png

最后再添加正負(fù)號和小數(shù)點(diǎn)浮點(diǎn)計(jì)算南吮,狀態(tài)機(jī)就更加復(fù)雜了,設(shè)計(jì)思路同樣采用繼承狀態(tài)對象阅酪。
計(jì)算機(jī)狀態(tài)機(jī)3.png

四旨袒,小結(jié)

其實(shí)我之前覺得設(shè)計(jì)的比較神奇的GUI框架汁针,其實(shí)也是用的事件驅(qū)動(dòng)加狀態(tài)機(jī)來設(shè)計(jì)术辐,GUI的一個(gè)個(gè)層次界面的容器用的就是層次狀態(tài)機(jī)的設(shè)計(jì),它有繼承的概念施无,也退出的時(shí)候是類似歸遞辉词,退出事件通知就是一層層為容器繪圖。之前我不知道還有層次狀態(tài)機(jī)的設(shè)計(jì)猾骡,最近看了此書后才明白瑞躺,這就是不識廬山真面目,只緣身在此山中吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兴想,隨后出現(xiàn)的幾起案子幢哨,更是在濱河造成了極大的恐慌,老刑警劉巖嫂便,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捞镰,死亡現(xiàn)場離奇詭異,居然都是意外死亡毙替,警方通過查閱死者的電腦和手機(jī)岸售,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂画,“玉大人凸丸,你說我怎么就攤上這事「ぴ海” “怎么了屎慢?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長忽洛。 經(jīng)常有香客問我抛人,道長,這世上最難降的妖魔是什么脐瑰? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任妖枚,我火速辦了婚禮,結(jié)果婚禮上苍在,老公的妹妹穿的比我還像新娘绝页。我一直安慰自己荠商,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布续誉。 她就那樣靜靜地躺著莱没,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酷鸦。 梳的紋絲不亂的頭發(fā)上饰躲,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音臼隔,去河邊找鬼嘹裂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摔握,可吹牛的內(nèi)容都是我干的寄狼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼氨淌,長吁一口氣:“原來是場噩夢啊……” “哼泊愧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盛正,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤删咱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后豪筝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痰滋,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年壤蚜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即寡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袜刷,死狀恐怖聪富,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情著蟹,我是刑警寧澤墩蔓,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萧豆,受9級特大地震影響奸披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮雷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一阵面、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦样刷、人聲如沸仑扑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镇饮。三九已至,卻和暖如春箕母,著一層夾襖步出監(jiān)牢的瞬間储藐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工嘶是, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钙勃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓俊啼,卻偏偏與公主長得像肺缕,于是被迫代替她去往敵國和親左医。 傳聞我的和親對象是個(gè)殘疾皇子授帕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容