工廠顧名思義就是建立產品,根據產品是具體產品還是具體工廠可分為簡單工廠模式和工廠方法模式,根據工廠的抽象程度可分為工廠方法模式和抽象工廠模式。該模式用於封裝和管理物件的建立,是一種建立型模式。本文從乙個具體的例子逐步深入分析,來體會三種工廠模式的應用場景和利弊。
1. 簡單工廠模式
該模式對物件建立管理方式最為簡單,因為其僅僅簡單的對不同類物件的建立進行了一層薄薄的封裝。該模式通過向工廠傳遞型別來指定要建立的物件,其uml類圖如下:
下面我們使用手機生產來講解該模式:
phone類:手機標準規範類(abstractproduct)
public inte***ce phone
miphone類:製造小公尺手機(product1)
public class miphone implements phone
@override
public void make()
}
iphone類:製造蘋果手機(product2)
public class iphone implements phone
@override
public void make()
}
phonefactory類:手機代工廠(factory)
public class phonefactory
else if(phonetype.equalsignorecase("iphone"))
return null;}}
演示:
public class demo
}
2. 工廠方法模式(factory method)
和簡單工廠模式中工廠負責生產所有產品相比,工廠方法模式將生成具體產品的任務分發給具體的產品工廠,其uml類圖如下:
也就是定義乙個抽象工廠,其定義了產品的生產介面,但不負責具體的產品,將生產任務交給不同的派生類工廠。這樣不用通過指定型別來建立物件了。
接下來繼續使用生產手機的例子來講解該模式。
其中和產品相關的phone類、miphone類和iphone類的定義不變。
abstractfactory類:生產不同產品的工廠的抽象類
public inte***ce abstractfactory
xiaomifactory類:生產小公尺手機的工廠(concretefactory1)
public class xiaomifactory implements abstractfactory
}
@override
public phone makephone() }
演示:
public class demo
}
3. 抽象工廠模式(abstract factory)
上面兩種模式不管工廠怎麼拆分抽象,都只是針對一類產品phone(abstractproduct),如果要生成另一種產品pc,應該怎麼表示呢?
最簡單的方式是把2中介紹的工廠方法模式完全複製乙份,不過這次生產的是pc。但同時也就意味著我們要完全複製和修改phone生產管理的所有**,顯然這是乙個笨辦法,並不利於擴充套件和維護。
抽象工廠模式通過在abstarctfactory中增加建立產品的介面,並在具體子工廠中實現新加產品的建立,當然前提是子工廠支援生產該產品。否則繼承的這個介面可以什麼也不幹。
其uml類圖如下:
從上面類圖結構中可以清楚的看到如何在工廠方法模式中通過增加新產品介面來實現產品的增加的。
接下來我們繼續通過小公尺和蘋果產品生產的例子來解釋該模式。
為了弄清楚上面的結構,我們使用具體的產品和工廠來表示上面的uml類圖,能更加清晰的看出模式是如何演變的:
pc類:定義pc產品的介面(abstractpc)
public inte***ce pc
mipc類:定義小公尺電腦產品(mipc)
public class mipc implements pc
@override
public void make()
}
mac類:定義蘋果電腦產品(mac)
public class mac implements pc
@override
public void make()
}
abstractfactory類:增加pc產品製造介面
public inte***ce abstractfactory
xiaomifactory類:增加小公尺pc的製造(concretefactory1)
public class xiaomifactory implements abstractfactory
@override
public pc makepc()
}
@override
public phone makephone()
@override
public pc makepc() }
演示:
public class demo
}
設計模式 工廠模式 抽象工廠模式
建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...
設計模式 工廠設計模式
用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...
設計模式 工廠設計模式
工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...