最近買了一本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裡面很多都有異同啊~~
下次來寫工廠模式的異同好了。
沒有留言:
張貼留言