※ 引述《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)