小A:“怎樣去比較狀態(tài)模式和策略模式?”
大B:“在狀態(tài)模式中,狀態(tài)的變遷是由對(duì)象的內(nèi)部條件決定,外界只需關(guān)心其接口,不必關(guān)心其狀態(tài)對(duì)象的創(chuàng)建和轉(zhuǎn)化;而策略模式裡,採(cǎi)取何種策略由外部條件(C)決定。Strategy模式與State模式的結(jié)構(gòu)形式幾乎完全一樣。但它們的應(yīng)用場(chǎng)景(目的)卻不一樣,State模式重在強(qiáng)調(diào)對(duì)象內(nèi)部狀態(tài)的變化改變對(duì)象的行爲(wèi),Strategy模式重在外部對(duì)策略的選擇,策略的選擇由外部條件決定,也就是說(shuō)算法的動(dòng)態(tài)的切換。但由於它們的結(jié)構(gòu)是如此的相似,可以認(rèn)爲(wèi)狀態(tài)模式是完全封裝且自修改的策略模式?!?
小A:“公認(rèn)的事實(shí):策略和狀態(tài)模式是孿生兄弟。”
大B:“就像你所知道的,策略模式通過(guò)可互換的算法規(guī)則來(lái)創(chuàng)建非常成功的業(yè)務(wù)模式。不管怎麼樣,狀態(tài)以非常高尚的方式幫助對(duì)象學(xué)習(xí)通過(guò)他們內(nèi)部的狀態(tài)來(lái)控制他們的行爲(wèi)。他總是無(wú)意中告訴他的對(duì)象客戶,‘跟著我重複就行了,我足夠好,我足夠聰明……’”