Discussion:
[問題] 請教關於design pattern的入門
(时间太久无法回复)
Eric
2007-01-03 05:33:25 UTC
Permalink
※ 引述《TonyQ (骨頭)》之銘言:
: ※ 引述《***@kkcity.com.tw ( )》之銘言:
: 最近敗了一本深入淺出設計模式,抱著啃了好幾天,XD
: 裡面的範例真的非常深入淺出,講解的內容非常有趣。
: 除了填字遊戲我總是沒辦法理解其中的奧妙以外,
: 其他的真是足以讓人推薦。
: 而且它的範例用程式碼都很清楚,不會讓你有亂七八糟的感覺,
: 以前看範例程式碼最討厭的就是用了一堆書上自己寫的package,
: 然後還要翻光碟或者上網去找它的lib才能理解它到底在寫甚麼,
: 這本書完全沒有這個問題,就算是引用自API的東西也會清楚講解。
: 不過大概是我程式底子還不夠扎實吧,
: 雖然看的出來是深入淺出,還是覺得很吃力。
: 像是反覆器(iterator)那章同時用到遞回、樹狀結構令人看的很費力,(囧)
: 想入門的人有一些DS的底子還有基本OO的觀念再看應該會好一些。
: 不過這也是設計模式所應有的基礎啦...
這本書寫的很好,但翻的有點爛
state object 翻成 "洲物件",真懷疑蔡大是不是用眼博士翻的...
另外command pattern 那邊好像有錯誤...
p212 的code 似乎不太符合command pattern 的精神
那邊的靜態type(lightOnCmd...CeilingFanOnCmd..etc) 居然不是super class(Command)
,而是把sub class給寫出來...怪怪的....
我寫信去O社問,但沒下文...


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.243.237.65
Eric
2007-01-03 11:18:59 UTC
Permalink
※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: ※ 引述《***@ptt.cc (Eric)》之銘言:
: > 這本書寫的很好,但翻的有點爛
: > state object 翻成 "洲物件",真懷疑蔡大是不是用眼博士翻的...
: > 另外command pattern 那邊好像有錯誤...
: > p212 的code 似乎不太符合command pattern 的精神
: > 那邊的靜態type(lightOnCmd...CeilingFanOnCmd..etc) 居然不是super class(Command)
: > ,而是把sub class給寫出來...怪怪的....
: > 我寫信去O社問,但沒下文...
: http://www.oreilly.com.tw/product_java.php?id=a163_errata
: 有必要那麼激動嗎? @o@
我想妳誤會我意思了...
p212的問題並沒有在堪誤表中...
所以我才寫信去問...
並不是因為洲物件的關係....

不過話說回來,到底怎樣的情況才會把他翻成"洲物件"
,如果是人工翻的話還挺誇張的


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.243.238.233
※ 編輯: ericwang1017 來自: 210.243.238.233 (01/03 19:18)
肉腳布
2007-01-03 12:46:37 UTC
Permalink
==> ***@bbs.sayya.org (foolish) 提到:
: ※ 引述《***@ptt.cc (Eric)》之銘言:
: > 我想妳誤會我意思了...
: > p212的問題並沒有在堪誤表中...
: > 所以我才寫信去問...
: > 並不是因為洲物件的關係....
: > 不過話說回來,到底怎樣的情況才會把他翻成"洲物件"
: > ,如果是人工翻的話還挺誇張的
: 翻譯書筆是需要堅韌的毅力的 xd
: 但也需要一點技巧,像版上還有些翻譯的作者
蔡老大的書我全部都買
其實
看電腦書10多年了
還沒有看到沒有錯誤的]
我想
如果看到怪怪的
我會回去看看原文
畢竟
聖人也\會有錯得



--
◎龍貓資訊天地(bbs.mgt.ncu.edu.tw)
◎[brucetsao]From: 59-117-173-45.dynamic.hinet.net
Eric
2007-01-03 15:36:44 UTC
Permalink
※ 引述《***@bbs.mgt.ncu.edu.tw (肉腳布)》之銘言:
: ==> ***@bbs.sayya.org (foolish) 提到:
: : 翻譯書筆是需要堅韌的毅力的 xd
: : 但也需要一點技巧,像版上還有些翻譯的作者
: 蔡老大的書我全部都買
: 其實
: 看電腦書10多年了
: 還沒有看到沒有錯誤的]
: 我想
: 如果看到怪怪的
: 我會回去看看原文
: 畢竟
: 聖人也\會有錯得
為什麼大家會覺得我很激動? 真奇怪
雖然菜老大似乎後來跟java派的人有點衝突,但他翻譯書籍的功勞是不可抹滅的
畢竟有人還願意英文不好的人翻書....

不過回歸到主題....
這篇討論也好幾篇了,到底有沒有人看過那個地方的問題... >_<

p212的問題跟翻譯一點關係都沒有阿.....是code有問題...
天阿~

因為我翻過原文書,code跟中文書一樣
所以我才寫信去o社問,看有沒有國外(內)的讀者反應那邊的問題...
那個錯誤跟翻譯一點關係也沒有....

我只是順帶一題那個 "洲物件" 因為我第一次看到覺得很好笑
沒想到大家都focus到那邊去了.....



--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.243.237.65
嗚嗚..
2007-01-07 14:57:46 UTC
Permalink
如果英文中文都是p212
我認為這樣寫無傷大雅
他並未使用concrete class當作method的signature
只是在new時=左邊的type使用
這並未影響pattern(這個pattern重點應該在註冊跟execute那邊吧)
而不會影響到後來的使用
他也不打算讓他再後來的程式去等於其他concrete class,所以沒多大問題才對

koji
※ 編輯: kojilin 來自: 218.167.168.164 (01/07 22:57)
Eric
2007-01-07 18:41:41 UTC
Permalink
※ 引述《kojilin》之銘言:
: 如果英文中文都是p212
: 我認為這樣寫無傷大雅
: 他並未使用concrete class當作method的signature
: 只是在new時=左邊的type使用
: 這並未影響pattern(這個pattern重點應該在註冊跟execute那邊吧)
: 而不會影響到後來的使用
: 他也不打算讓他再後來的程式去等於其他concrete class,所以沒多大問題才對
: koji
: ※ 編輯: kojilin 來自: 218.167.168.164 (01/07 22:57)
很高興有人發表意見...
不過,簡單的來說,程式怎run是都沒問題是確定的
我所提的問題是語意的問題
書上的範例是
LightOnCmd lightOnCmd = new LightOnCmd.....略

我的觀點是
invoker 不應該知道細部的command...

所以這邊應該是
Command lightOncmd = new LightOnCmd

以上

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.31.174.53
※ 編輯: ericwang1017 來自: 61.31.174.53 (01/08 02:41)
嗚嗚..
2007-01-08 03:42:53 UTC
Permalink
在這個範例真正的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)
Alien
2007-01-08 08:45:02 UTC
Permalink
※ 引述《ericwang1017 (Eric)》之銘言:
: ※ 引述《kojilin》之銘言:
: : 如果英文中文都是p212
: : 我認為這樣寫無傷大雅
: : 他並未使用concrete class當作method的signature
: : 只是在new時=左邊的type使用
: : 這並未影響pattern(這個pattern重點應該在註冊跟execute那邊吧)
: : 而不會影響到後來的使用
: : 他也不打算讓他再後來的程式去等於其他concrete class,所以沒多大問題才對
: : koji
: 很高興有人發表意見...
: 不過,簡單的來說,程式怎run是都沒問題是確定的
: 我所提的問題是語意的問題
: 書上的範例是
: LightOnCmd lightOnCmd = new LightOnCmd.....略
: 我的觀點是
: invoker 不應該知道細部的command...
: 所以這邊應該是
: Command lightOncmd = new LightOnCmd
: 以上
沒有翻書, 只從你的文字去猜你說的問題所在.

你說的是 invoker 不該 declare concrete command?

但問題是, Invoker 才是應該知道他想要跑什麼 Command
的人, 所以 Invoker declare 並 instantiate 他需要
的 command implementation 交由 Executer 去執行反而
才是合理的寫法.

除非 Invoker 做的是 delegate Command to executer 的角色,
但這就不是這 Pattern 涵蓋的範圍了.

Alien

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.72.0.45
Eric
2007-01-08 10:15:24 UTC
Permalink
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《ericwang1017 (Eric)》之銘言:
: : 很高興有人發表意見...
: : 不過,簡單的來說,程式怎run是都沒問題是確定的
: : 我所提的問題是語意的問題
: : 書上的範例是
: : LightOnCmd lightOnCmd = new LightOnCmd.....略
: : 我的觀點是
: : invoker 不應該知道細部的command...
: : 所以這邊應該是
: : Command lightOncmd = new LightOnCmd
: : 以上
: 沒有翻書, 只從你的文字去猜你說的問題所在.
: 你說的是 invoker 不該 declare concrete command?
: 但問題是, Invoker 才是應該知道他想要跑什麼 Command
: 的人, 所以 Invoker declare 並 instantiate 他需要
: 的 command implementation 交由 Executer 去執行反而
: 才是合理的寫法.
: 除非 Invoker 做的是 delegate Command to executer 的角色,
: 但這就不是這 Pattern 涵蓋的範圍了.
: Alien
其實問題很簡單....看p207的圖就知道
invoker 是remoteControl,他組裝了一個Command
而這個command是super class 而不是sub class

這個問題是
書上的範例把invoker要組裝的commmand組到ConcreateCommand
但是應該是組裝Command....
故我認為那邊有問題
這樣大家應該看的比較懂了吧....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.243.237.65
嗚嗚..
2007-01-08 16:35:18 UTC
Permalink
※ 引述《ericwang1017 (Eric)》之銘言:
: 其實問題很簡單....看p207的圖就知道
: invoker 是remoteControl,他組裝了一個Command
: 而這個command是super class 而不是sub class
: 這個問題是
: 書上的範例把invoker要組裝的commmand組到ConcreateCommand
: 但是應該是組裝Command....
: 故我認為那邊有問題
: 這樣大家應該看的比較懂了吧....
那個...對於invoker他是要看comman沒錯
但是對於set這個command的外部使用者也就是Main
用Concrete class是一點都沒問題的
所以我才說invoker定義method跟自己呼叫execute看到Command class就好
外部的main來說,不管怎寫都是不影響此pattern
也完全沒有什麼問題

你堅持他一定得用Command class?
可是問題是這邊這個uml要表達的並不是說你寫程式時在set時
得用super class的Command class

我也只能說到這樣了...如果還是說服不了我想我講解功力不足..得在精進了.


koji

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.167.168.164
Eric
2007-01-08 16:47:44 UTC
Permalink
※ 引述《kojilin (嗚嗚..)》之銘言:
: ※ 引述《ericwang1017 (Eric)》之銘言:
: : 其實問題很簡單....看p207的圖就知道
: : invoker 是remoteControl,他組裝了一個Command
: : 而這個command是super class 而不是sub class
: : 這個問題是
: : 書上的範例把invoker要組裝的commmand組到ConcreateCommand
: : 但是應該是組裝Command....
: : 故我認為那邊有問題
: : 這樣大家應該看的比較懂了吧....
: 那個...對於invoker他是要看comman沒錯
: 但是對於set這個command的外部使用者也就是Main
: 用Concrete class是一點都沒問題的
: 所以我才說invoker定義method跟自己呼叫execute看到Command class就好
: 外部的main來說,不管怎寫都是不影響此pattern
: 也完全沒有什麼問題
: 你堅持他一定得用Command class?
: 可是問題是這邊這個uml要表達的並不是說你寫程式時在set時
: 得用super class的Command class
: 我也只能說到這樣了...如果還是說服不了我想我講解功力不足..得在精進了.
: koji
我已經找到答案了就是那張圖
你講的我看的懂
而且我覺得我比較需要加強國文能力 XD

不過還是謝謝啦

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.96.192

Loading...