2011年9月22日 星期四

Design Pattern 比對(1) Strategy and State的異同

最近買了一本Design Pattern的書,又開始重讀一次~~這時候就覺得以前的那本Design pattern好難用啊~~這時候看就覺得好容易看懂…


 


本篇(或著本系列)沒有什麼Design Pattern教學,純粹只是把我當初一直沒有搞懂的地方寫出來而已~~


還有幾個很相近的pattern作介紹,相看線上教學的可以直接跳過@@





Strategy 和command都是用has-a relationship代替is-a relationship的


畫出來的UML也是完全相同。


 


而且其實雙方都可以作到對方的動作


 


而不同之處在於


State Pattern最主要會用來表示其"行為" 會一直改變的動作


而Strategy Pattern通常表示其行為是固定的,不會隨意更動。


 


State Pattern就像是State Diagram上面所描述的一樣,其實它是可以依據不同的state,跳到另外一個state,而且很固定的是在A state,經過B behavior後,跳到C state


動作非常相近~~


 


另一個特別的點是:state通常需要作很多個行為。


而strategy是可以一個behavior,只有一個strategy的~~


(當然這邊可以用不同的實作來違反~但這就不符合該命名了)


 


補充:其實實作起來一點都不難,但這邊平常的思維不容易想到就是了~我們一般是把一個「實體」定義為一個Object,而行為則是Method,在這邊卻是要把行為(behavior)定義成「物件」而且行為還要有interface,腦袋沒有轉換的話…很不容易想到


比方說我們要定義一隻「烏鴨」好了,~烏鴨會「叫」、會「吃」、會「飛」,屬於鳥類
程式設計上,我們就會定義一個interface 「鳥」,和一個class「烏鴨」,烏鴨底下有「叫」、「吃」、「飛」三個行為
但在Strategy裡面:連「叫」、「吃」、「飛」三個都是三個物件  這平常不會想到。


而在state裡面的話:大概就是定義一個「鳥類行為」的狀態…然後裡面有「叫」、「吃」、「飛」三種動作~~不同的鳥類用不同的「狀態」~~然後如果鳥類行為常常會變動(比方說這是隻會跟別的鳥類「換身體」的烏鴨~~那麼它每次換行為的話~~就可以換State...


聽起來很怪~~烏鴨怎麼會換身體呢?所以一般因為其行為不怎麼會變動~~所以用Strategy比較好。


 


 


---


其實Design pattern裡面很多都有異同啊~~


下次來寫工廠模式的異同好了。


沒有留言:

張貼留言