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