應(yīng)該做一個(gè)state么?這是一個(gè)問(wèn)題:
state可以說(shuō)是if-else的一種替代品,極端的情況下面state可以讓你的程序中if-else程序塊消失得無(wú)影無(wú)蹤,但是,這并不是銀彈。state對(duì)于狀態(tài)可預(yù)知的情況下非常有效,但是對(duì)于state不可預(yù)知,或者相似的state數(shù)量太多。過(guò)多的state會(huì)造成class的粒度過(guò)細(xì),程序反而不簡(jiǎn)潔。在這樣的情況下,你應(yīng)該考慮使用if-else程序塊來(lái)替代state。
例如:
有這樣的一個(gè)程序,它可以生成任意形狀的多邊形,而多邊形的各個(gè)節(jié)點(diǎn)是可以移動(dòng)的,問(wèn)題就來(lái)了。
我并不知道用戶將要使用多少個(gè)節(jié)點(diǎn)的多邊形,因此我無(wú)法的創(chuàng)建那么多相應(yīng)的state來(lái)使得這樣一個(gè)程序正常工作。state大多數(shù)都是確定的,對(duì)于不確定的,state似乎無(wú)能為力,例如此例
一種解決方法是我利用Manager傳遞給state一個(gè)state參數(shù),讓state有機(jī)會(huì)知道用戶的操作意圖,在這個(gè)例子里面是讓state知道用戶打算操作某一個(gè)節(jié)點(diǎn),而state根據(jù)這個(gè)state參數(shù)來(lái)處理用戶的操作,比如說(shuō),state得到的是用戶操作的某一個(gè)點(diǎn)的index ,而state只要寫(xiě)
points[index].moveTo(points[index].getX()+offset_x , points[index].getY()+offset_y);
就可以,從而避免了state過(guò)多出現(xiàn)的問(wèn)題