策略模式:定義演算法族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化獨立於使用演算法的客戶。
簡單工廠:將對象的建立完全獨立出來,讓對象的建立和具體的使用客戶無關。
簡單工廠嚴格意義上不是一種設計模式,只能是一種良好的編程習慣。
名詞理解:
工廠(Factory)模式我們可以做如下理解,假設有一個Audi的公司生產汽車(似乎也不用假設了),它掌握一項核心的技術就是生產汽車,另一方面,它生產的汽車是有不同型號的,並且在不同的生產線上進行組裝。當客戶通過銷售部門進行預定後,Audi公司將在指定的生產線上為客戶生產出它所需要的汽車。
策略(Strategy)模式在結構上與原廠模式類似,唯一的區別是原廠模式執行個體化一個產品的操作是在服務端來做的,換句話說用戶端傳達給服務端的只是某種標識,服務端根據該標識執行個體化一個對象。而策略模式的用戶端傳達給服務端的是一個執行個體,服務端只是將該執行個體拿過去在服務端的環境裡執行該執行個體的方法。這就好比一個對汽車不甚瞭解的人去買車,他在那一比劃,說要什麼什麼樣的,銷售部門根據他的這個“比劃”來形成一份訂單,這就是原廠模式下的工作方式。而策略模式下那個顧客就是個行家,他自己給出了訂單的詳細資料,銷售部門只是轉了一下手就交給生產部門去做了。通過兩相對比,我們不難發現,採用原廠模式必須提供足夠靈活的銷售部門,如果使用者有了新的需求,銷售部門必須馬上意識到這樣才可以做出合適的訂單。所以倘一款新車出來了,生產部門和銷售部門都需要更新,對顧客來說也需要更新對新車的描述所以需要改動的地方有三處。而策略模式中的銷售部門工作比較固定,它只負責接受訂單並執行特定的幾個操作。當一款新車出來時,只需要對服務端的生產部門和用戶端的代碼進行更新,而不需要更新銷售部門的代碼。
支援人員:
簡單工廠和策略的基礎都是因為物件導向的封裝與多態。他們實現的思想都是先設定一個抽象的模型並從該模型派生出符合不同客戶需求的各種方法,並加以封裝。
轉自:http://www.cnblogs.com/ppchouyou/archive/2008/08/29/1279203.html
用C++實現策略模式:
http://dotcpp.iteye.com/blog/607318