使用工廠設計模式的場景

2021-07-31 14:18:55 字數 1057 閱讀 6590

建立類物件雖然可以使用new(底層也是通過反射建立物件的),但是在一些情況下使用工廠模式確實最合適的。

情況一:如果乙個物件擁有很多子類,那麼建立該物件的子類使用工廠模式是最合適的,不但可以面向介面的程式設計,為維護以及開發帶來方便。

情況二:如果建立某個物件時需要進行許多額外的操作,如查詢資料庫然後將查詢到的值賦予要建立的物件(單例初始化時使用比較多),或是需要許多額外的賦值等等。如果檢視jdk原始碼中,會發現許多成員變數在物件構造時,通過工廠方法進行建立的。因為這些成員變數本身的建立也很複雜。不可能建立物件時,在該物件的構造方法裡建立成員變數然後再賦值給該成員變數。而且使用工廠模式也提高了**的重用性。

如果建立物件時只需要對簡單的成員變數可以直接通過構造方法傳入即可。

物件導向設計思想就是分派和分裝。即將長**分派分隔成段,然後對每段進行封裝。這樣如果需要修改只修改每段即可,而不會牽一髮而動全身。一定不要將多個雞蛋放到乙個籃子裡面。

工廠模式分為工廠方法(factory method)和抽象工廠(abstract factory)

區別在於被建立物件的負責程度。

如果相關聯的產品只有乙個,那麼不需要對工廠物件進行抽象了。使用工廠方法就可以了(即返回物件,根據傳入的值然後生成不同的子類)。

如果關聯的產品有多個,可以將工廠類進行抽象。讓具體建立業務相關類的工作交給子類實現。如工廠子類1建立產品a的x業務物件和產品b的x業務物件,工廠子類2建立產品a的y業務物件和產品b的y業務物件.這樣就實現了建立物件的垂直切斷(這種方式是以業務為主導的)。

使用抽象工廠時,通常建立產品a和建立產品b的方法有一定的聯絡,因此才將兩個物件**在一起,作為抽象工廠的主導元素。

實際開發中,工廠模式使用比較多,並且和動態類裝作器結合到一起也是非常多。

如jlive就是這樣實現。

//這裡假如生成的物件就是該類本身,借助單例模式

public class factorymethod

} return instance;

} }

注意物件鎖使用非常多,例如concrenthashmap在新增或是刪除資料的時候也是對存放元素的陣列物件進行的鎖定。

為什麼使用工廠模式

非原創,只是搬運。位址 1.工廠模式並不僅僅是用來new出乙個類的物件的。簡單工廠確實如題主的描述所說,是乙個工廠對應乙個類的關係。假設有 包a和 包b,包b是 包a的呼叫者,a向b暴露介面inte cea。在a的內部結構中,實現了inte cea的有classa1,classa2,classa3,...

使用工廠模式優化if else

太多的if else 可讀性太差,需要重構易於後期維護。工廠類 author shou title 工廠類 date 2020 4 229 48 public class strategyfactory 內部類 public static class holder 返回的是單例的工程物件 publi...

在spring中使用工廠模式

bean的建立預設就是框架利用反射new出來的bean例項 工廠模式 工廠幫我們建立bean 有乙個專門幫我們建立物件的類,這個類就是工廠 假設有乙個飛機類airplane,那麼工廠模式中飛機的建立方法就是 airplane ap airplanefactory.getairplane string...