簡單工廠模式
多個工廠模式
替代單例模式
延遲初始化
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類
//抽象產品類
public
abstract
class
product
//抽象方法
public
abstract
void
method2();
}//具體產品類
public
class
concreteproduct1
extend
product
}public
class
concreteproduct2
extend
product
}//抽象工廠類
public
abstract
class
creator
//具體工廠類
public
class
concretecreator
extends
creatorcatch(exception e)
return (t)product} }
良好的封裝性,**結構清晰,呼叫者不需知道建立物件的艱辛過程,降低模組間的耦合
擴充套件性優秀,在新增產品的情況下,只要適當的修改具體的工廠類或擴充套件乙個工廠類就可以完成「擁抱變化」
遮蔽產品類,產品類的實現如何變化呼叫者不需要關心,它只需關心產品的介面,只要介面不變,系統中的上層模組就不會發生變化
工廠方法是典型的解耦框架,高層模組只需要知道產品的抽象,其他實現類都不用關心,符合迪公尺特法則
在所有需要生成物件的地方都可以考慮是否增加工廠類
需要靈活的,可拓展的框架時可考慮採用工廠方法模式,例如設計乙個連線郵件伺服器的框架,有三種網路協議可供選擇:pop3,imap,http,可以將這三種連線方法作為產品類,定義乙個介面如iconnectmail
乙個模組僅需要乙個工廠類,故沒有必要把他生產出來,使用靜態的方法就可以了//其他都與上述一樣
//具體工廠類
public
class
concretecreator catch(exception e)
return (t)product
} }//場景類中通過concretecreator.createproduct(classc)直接呼叫
呼叫簡單,但是擴充套件困難,不符合開閉原則
符合開閉原則,有更好的拓展性
//抽象工廠類
public
abstract
class
creator
//產品1的建立工廠實現
public
class
concreteproduct1creator
extends
creator
}//產品2的建立工廠實現
public
class
concreteproduct2creator
extends
creator
}//場景類中需要通過new不同的工廠類來生產不同的產品
建立類的職責清晰,結構簡單,但是增大了擴充套件和維護的難度
//單例類
public
class
singleton
public
void
dosomething()
}//生成單例的工廠類
public
class
singletonfactorycatch(exception e)
}public
static singleton getsingleton()
}
public
class
productfactoryelseelse
//同時把物件放到快取容器中
prmap.put(type,product);
}return product;}}
可擴充套件,例如限制某產品的最大例項化數量 工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...