設(shè)計(jì)模式學(xué)習(xí)筆記(十)狀態(tài)模式

定義

狀態(tài)模式允許對(duì)象內(nèi)部狀態(tài)改變時(shí)改變他的行為,對(duì)象看起來好像修改了他的類.

要點(diǎn)

  • Context會(huì)將行為委托給當(dāng)前的狀態(tài)對(duì)象.
  • 狀態(tài)模式和策略模式擁有相同的類圖,但是他們的意圖不同.
  • 狀態(tài)的切換可以由Context類或者狀態(tài)類來切換

個(gè)人理解

狀態(tài)模式和策略模式很像,但他們又有許多不同之處.策略模式會(huì)在外部控制對(duì)象使用組合或者委托來使對(duì)象在運(yùn)行時(shí)執(zhí)行不同的行為.而狀態(tài)模式更像是將這些行為和狀態(tài)的改變封裝在內(nèi)部,我們外部只是需要做一些小小的動(dòng)作,其余狀態(tài)的改變都是在對(duì)象內(nèi)部自動(dòng)完成的!狀態(tài)模式同時(shí)更方便我們來擴(kuò)展代碼,避免了代碼中大量出現(xiàn)switch語句卻不好維護(hù)的尷尬.

針對(duì)狀態(tài)模式的實(shí)現(xiàn),書中給出了兩種實(shí)現(xiàn)方案,我們先來闡述下實(shí)現(xiàn)以及特點(diǎn).

第一種:將狀態(tài)的切換交給對(duì)象的各個(gè)狀態(tài)類.這是書中主要在講的一種方式,先是通過構(gòu)造方法將Context的對(duì)象傳入到狀態(tài)類中,這種寫法在Context中寫一些get方法,獲取到對(duì)象的各個(gè)狀態(tài)類,這是為了一定程度上的解耦,但依然可以看出,我們將改變狀態(tài)的時(shí)機(jī)交給狀態(tài)類的話,未免耦合還是有一些高.然后當(dāng)Context需要委托執(zhí)行動(dòng)作時(shí),只要執(zhí)行當(dāng)前狀態(tài)下的委托便可以了.

第二種:將狀態(tài)的切換留在Context中.我們需要對(duì)Context這個(gè)類的狀態(tài)切換做更多的操作,但寫法如何能更加優(yōu)雅是一個(gè)很值得深思的問題.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容