• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            State 模式

            Posted on 2009-12-29 21:25 rikisand 閱讀(513) 評論(0)  編輯 收藏 引用 所屬分類: 工作記錄~~everydayDesign Pattern

            STATE 模式:

            一個(gè)對象的行為取決于他的狀態(tài),而且它必須在運(yùn)行時(shí)根據(jù)狀態(tài)改變他的行為。常規(guī)實(shí)現(xiàn)中,一個(gè)操作含有龐大的多分支的條件語句,且這些分支依賴于該對象的狀態(tài)。這個(gè)狀態(tài)通常使用一個(gè)或者多個(gè)枚舉常量表示。STate模式把這些狀態(tài)時(shí)候的對象看做一個(gè)獨(dú)立的對象,也就是將不同狀態(tài)時(shí)的行為分散到相應(yīng)的狀態(tài)類中。要達(dá)到這樣的效果,需要context,也就是狀態(tài)的持有者,即原先的類;抽象狀態(tài)類,他封裝了與context交互的接口;具體狀態(tài)類,也就是一個(gè)個(gè)的具體狀態(tài)。context中保存一個(gè)抽象狀態(tài)類對象為成員,并delegate對象行為給他,從而使相應(yīng)狀態(tài)下的行為代碼生效。如果狀態(tài)改變的準(zhǔn)則不是固定的則state狀態(tài)類同時(shí)應(yīng)該重寫changestate類以控制狀態(tài)的改變,否則可以在context中實(shí)現(xiàn)。

            具體到我們的項(xiàng)目:

            每一個(gè)device即為context,他擁有一個(gè)state對象,device中的函數(shù)processMsg(){state->processMSg();} 由于狀態(tài)改變的規(guī)則依賴于收到的消息,也就是說一個(gè)狀態(tài)可能轉(zhuǎn)換到多個(gè)狀態(tài)device的每個(gè)狀態(tài)需要重寫statechange方法,stateChange(){state->stateChange(this,msg);} 這樣,不同的狀態(tài)下的行為實(shí)現(xiàn)在具體狀態(tài)的類中,比原先的版本清晰明了,可讀性更強(qiáng)。

            999久久久无码国产精品| 中文成人久久久久影院免费观看| 无码AV中文字幕久久专区| 亚洲精品乱码久久久久久按摩| 国产精品99精品久久免费| 久久久WWW成人免费精品| 一本久久a久久精品亚洲| 国产亚洲欧美成人久久片 | 久久久久国产精品| 思思久久好好热精品国产| 国产午夜免费高清久久影院| 精品久久人人妻人人做精品| 久久天天躁狠狠躁夜夜avapp | 亚洲国产成人久久一区WWW| 亚洲AV无码成人网站久久精品大| 久久久久久久综合日本亚洲| 亚洲成色WWW久久网站| 久久一本综合| 久久九九全国免费| 久久99精品久久久久久久不卡| 少妇无套内谢久久久久| 久久久久亚洲精品男人的天堂| 久久精品国产亚洲AV香蕉| 久久久久久久精品成人热色戒| 狠狠久久综合| 中文精品久久久久国产网址| 久久99精品久久久久久动态图| 久久91精品国产91| 久久无码人妻精品一区二区三区| 国产69精品久久久久9999| 精品熟女少妇a∨免费久久| 无码精品久久久久久人妻中字| 久久中文字幕精品| 2020久久精品亚洲热综合一本| 欧美午夜A∨大片久久| 欧美伊人久久大香线蕉综合69| 久久AⅤ人妻少妇嫩草影院| 久久香蕉国产线看观看乱码| 精品国产一区二区三区久久| 久久久精品午夜免费不卡| 久久99精品久久久久久水蜜桃 |