※ 引述《ericwang1017 (Eric)》之銘言:
: 很高興有人發表意見...
: 不過,簡單的來說,程式怎run是都沒問題是確定的
: 我所提的問題是語意的問題
: 書上的範例是
: LightOnCmd lightOnCmd = new LightOnCmd.....略
: 我的觀點是
: invoker 不應該知道細部的command...
: 所以這邊應該是
: Command lightOncmd = new LightOnCmd
: 以上
我當然知道程式怎run是都沒問題是確定的
我要表達的是,他這樣寫並未影響整個pattern要表達的事情
在這個範例真正的invoker是Remote controller而非main
Main內當你在new的這個階段
你就知道細部command了
當他註冊到remote controller時
註冊吃的method本身method signature只要是Command就好了
所以就算你是寫
LightOnCmd lightOnCmd = new LightOnCmd
or
Command lightOncmd = new LightOnCmd
都不會有任何影響
除非他想拿lightOnCmd去接其他東西
不然這邊這麼寫不會對pattern有影響,也不會對pattern所要表達觀念有何影響
因為pattern只要注意註冊跟execute那時是用command去接就好了
除非你是用外部setter,getter,像IOC方式去對這個class去註冊command,
不然像他這邊的main只是要表達註冊跟啟動
使用concrete class並不會有什麼誤解的舉動
main只是設定每個按鈕跟按下remote controller,
真正execute command的是remote controller,而他只看到Command那就是了
koji
※ 編輯: kojilin 來自: 140.92.57.104 (01/08 11:42)