怎樣做醫(yī)院網(wǎng)站做電商一個(gè)月能掙多少錢(qián)
1.狀態(tài)模式
1.1定義
當(dāng)一個(gè)對(duì)象的內(nèi)在狀態(tài)改變時(shí)允許根據(jù)當(dāng)前狀態(tài)作出不同的行為;
1.2 適用場(chǎng)景
(1)一個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)根據(jù)狀態(tài)來(lái)決定其行為.
(2)代碼中包含了大量的與狀態(tài)有關(guān)的條件語(yǔ)句,例如:一個(gè)操作含有龐大的多分值語(yǔ)句(if-else或者switch-case), 且這些分支依賴(lài)于該對(duì)象的狀態(tài).
簡(jiǎn)言之就是需要用到狀態(tài)機(jī)的地方都可以.
1.3 場(chǎng)景舉例
游樂(lè)場(chǎng)的抓娃娃機(jī), 提供了搖桿,但是在投幣了和未投幣的情況下,給出的響應(yīng)是不一樣的,盡管動(dòng)作是相同的.
1.4狀態(tài)模式的UML類(lèi)圖
- Context, 調(diào)用主體,擁有和維護(hù)一個(gè)State實(shí)例;
- State, 定義了狀態(tài)接口,一系列行為的狀態(tài);
- ConcreteStateA, 具體狀態(tài)類(lèi),實(shí)現(xiàn)了State狀態(tài)接口,從而達(dá)到不同狀態(tài)下相同動(dòng)作作出的不同行為.
2.策略模式
2.1定義
定義了算法族,分別封裝起來(lái),讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶(hù).
2.2適用場(chǎng)景
- 針對(duì)同一類(lèi)問(wèn)題的多種處理方式,僅僅是具體行為的有差別時(shí);
- 需要安全低封裝多種同一類(lèi)型的操作時(shí);
- 出現(xiàn)同一抽象類(lèi)有多個(gè)子類(lèi),而有需要使用if-else或者switch-case來(lái)選擇具體的子類(lèi)時(shí).
2.3場(chǎng)景舉例
HAL的多家供應(yīng)商方案, 約定的HAL接口行為是統(tǒng)一規(guī)范的,后邊對(duì)應(yīng)的具體實(shí)現(xiàn)行為是有差異的.
2.4策略模式的UML類(lèi)圖
說(shuō)明:
- Context, 調(diào)用行為主體,可類(lèi)比Android 系統(tǒng)服務(wù);
- Stragety, 策略的抽象, 類(lèi)比為HAL接口;
- ConcretaStragetyA, 策略實(shí)例,有策略的方法的具體實(shí)現(xiàn),可類(lèi)比供應(yīng)商的vendor實(shí)現(xiàn)方案.
3.相似異同點(diǎn)
二者在UML圖中看起來(lái)有點(diǎn)相似,
狀態(tài)模式下, Context調(diào)用主體記錄的State是可以根據(jù)當(dāng)前行為在ConcretaStateA和ConcreteStateB之間來(lái)回切換;
--- > 封裝基于狀態(tài)的行為,并將行為委托給當(dāng)前狀態(tài)類(lèi).
而在策略模式下,Context調(diào)用主題使用的是一種算法方案封裝, 在運(yùn)行期間只可持有特定的一種, 不可互相來(lái)回切換.
--- > 其重點(diǎn)在于可以互換的行為封裝.
二者都屬于行為型的設(shè)計(jì)模式.