工廠方法模式

2021-08-15 19:09:48 字數 2269 閱讀 9110

簡單工廠模式

多個工廠模式

替代單例模式

延遲初始化

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類

//抽象產品類

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 ...