天天看點

9-Factory method(Simple Factory method&Abstract factories)

//工廠方法的了解比較容易,重要還是如何在實踐中應用。以下範例比較經典:

基本概念

     FactoryMethod是一種建立性模式,它定義了一個建立對象的接口,但是卻讓子類來決定具體執行個體化哪一個類.當一個類無法預料要建立哪種類的對象或是一個類需要由子類來指定建立的對象時我們就需要用到Factory Method 模式了.簡單說來,Factory Method可以根據不同的條件産生不同的執行個體,當然這些不同的執行個體通常是屬于相同的類型,具有共同的父類.Factory Method把建立這些執行個體的具體過程封裝起來了,簡化了用戶端的應用,也改善了程式的擴充性,使得将來可以做最小的改動就可以加入新的待建立的類. 通常我們将Factory Method作為一種标準的建立對象的方法,當發現需要更多的靈活性的時候,就開始考慮向其它建立型模式轉化

    ...具體見:http://www.ibm.com/developerworks/cn/java/designpattern/factory/

需要着重了解的地方是:

  • 首先用戶端可以統一從抽象建立器擷取産生的執行個體,Creator的作用将client和産品建立過程分離開來,客戶不用操心傳回的是那一個具體的産品,也 不用關心這些産品是如何建立的.同時,ConcreteProduct也被隐藏在Product後面,ConreteProduct繼承了Product 的所有屬性,并實作了Product中定義的抽象方法,按照Java中的對象造型(cast)原則,通過ConcreteCreator産生的 ConcreteProduct可以自動的上溯造型成Product.這樣一來,實質内容不同的ConcreteProduct就可以在形式上統一為 Product,通過Creator提供給client來通路.
  • 其次,當我們添加一個新的ConcreteCreator時,由于Creator所提供的接口不變,用戶端程式不會有絲毫的改動,不會帶來動一發而牽全身的災難, 這就是良好封裝性的展現.但如果直接用ConcreteProduct和ConcreteCreator兩個類是無論如何也做不到這點的. 優良的面向對象設計鼓勵使用封裝(encapsulation)和委托(delegation),而Factory Method模式就是使用了封裝和委托的典型例子,這裡封裝是通過抽象建立器Creator來展現的,而委托則是通過抽象建立器把建立對象的責任完全交給具體建立器ConcreteCreator來展現的.

這些知識,隻有在執行個體和不斷的實踐中才能得到很好的關聯,使之融會貫通!

工廠模式其簡單的實質性的内容就是:提供建立對象的接口,工廠按使用者需求定制産品。(這是一個很好的執行個體參考點)

繼續閱讀