工廠模式分為三種模式,分別為: 下麵就分別介紹一下這三種設計模式: 簡單工廠模式就是由一個工廠類根據傳入的參數量,來決定創建哪一種產品類的實例。(仔細理解這句話,非常重要) 結構圖: 上圖涉及三個類: 源代碼實例: 抽象產品類(Product): Product.java: 具體產品類(Concre
工廠模式分為三種模式,分別為:
- 簡單工廠(Simple Factory)模式:又稱靜態工廠方法模式(Static Factory Method Pattern)
- 工廠方法(Factory Method)模式:又稱多態性工廠模式(Polymorphic Factory Pattern)或虛擬構造子模式(Virtual Construct Pattern)
- 抽象工廠(Abstract Factory)模式:又稱工具箱模式(Kit或Tookit)
下麵就分別介紹一下這三種設計模式:
- 簡單工廠模式(Simple Factory):
簡單工廠模式就是由一個工廠類根據傳入的參數量,來決定創建哪一種產品類的實例。(仔細理解這句話,非常重要)
結構圖:
上圖涉及三個類:
- 工廠類(Creator):擔任工廠模式的核心。工廠類在客戶端的調用下直接創建對象,它往往由一個具體類java類實現。
- 抽象產品類(Product):具體產品類的介面或抽象類。
- 具體產品類(ConcreteProduct):工廠方法模式所創建的任何角色都是這個角色的實例
源代碼實例:
抽象產品類(Product):
Product.java:
public interface Product { }
具體產品類(ConcreteProduct):
ConcreteProductA.java:
public class ConcreteProductA implements Product{ public ConcreteProductA(){ System.out.println("具體產品類A"); } }
ConcreteProductB.java:
public class ConcreteProductB implements Product{ public ConcreteProductB(){ System.out.println("具體產品類B"); } }
工廠類(Creator):
Creator.java:
public class Creator { public static Product factory(String which){ if (which.equalsIgnoreCase("ConcreteProductA")) { return new ConcreteProductA(); }else if (which.equalsIgnoreCase("ConcreteProductB")) { return new ConcreteProductB(); }else { return null; } } }
客戶端:
public class Client { public static void main(String[] args){ Creator creator = new Creator(); creator.factory("ConcreteProductB"); creator.factory("ConcreteProductA"); } }
輸出:
具體產品類B 具體產品類A
2、工廠方法模式(Factory Method)
工廠方法模式中核心工廠類變為一個抽象類,僅負責給出具體工廠子類必須實現的介面,不再接觸哪一個產品類被實例化這種細節。
結構中成員類和上面差不多,:
- 抽象工廠類(Creator):為所有具體工廠類提供介面。
- 具體工廠類(ConcreteCreator):擔任這個角色是實現了抽象工廠介面的具體java類,並且受到應用程式的調用來創建產品。
- 抽象產品(Product)
- 具體產品(ConcreteProduct)
抽象方法將某一個產品和一個工廠進行了綁定,這是他與另外兩個工廠模式的區別。下麵註意看代碼:源代碼:
抽象產品(Product):
public interface Product { }
具體產品(ConcreteProduct)類:
ConcreProductA.java:
public class ConcreteProductA implements Product{ public ConcreteProductA(){ System.out.println("具體產品類A"); } }
ConcreProductB.java:
public class ConcreteProductB implements Product{ public ConcreteProductB(){ System.out.println("具體產品類B"); } }
抽象工廠類(Creator):
Creator.java:
public interface Creator { public Product factory(); }
具體工廠類(ConcreteCreator):
ConcreteCreatorA.java:
public class ConcreteCreatorA implements Creator{ @Override public Product factory() { return new ConcreteProductA(); } }
ConcreteCreatorB.java:
public class ConcreteCreatorB implements Creator{ @Override public Product factory() { return new ConcreteProductB(); } }
客戶端:
public class Client { public static void main(String[] args){ Creator creatorA = new ConcreteCreatorA(); creatorA.factory(); Creator creatorB = new ConcreteCreatorB(); creatorB.factory(); } }
輸出:
具體產品類A
具體產品類B
3、抽象工廠模式(Abstract Factory)
抽象工廠模式是對象的創建模式,他是工廠方法模式的進一步擴展。使用抽象工廠模式,可以創建來自不同工廠的各種產品。
結構圖中的角色:
- 抽象工廠類(Creator)
- 具體工廠類(ConcreteCreator)
- 抽象產品(Product)
- 具體產品(ConcreteProduct)
源代碼:
抽象產品類(Product):
ProductA.java
public interface ProductA { }
ProductB.java
public interface ProductB { }
具體產品類(ConcreteProduct):
ProductA1.java
public class ProductA1 implements ProductA{ public ProductA1(){ System.out.println("具體產品A1"); } }
productA2.java、productB1.java、productB2.java與上類似,不在列出。
抽象工廠類(Creator):
Creator.java
public interface Creator { public ProductA factoryA(); public ProductB factoryB(); }
具體工廠類(ConcreteCreator):
ConcreteCreator1.java
public class ConcretCreator1 implements Creator{ public ConcretCreator1(){ System.out.println("具體工廠1:"); } public ProductA factoryA(){ return new ProductA1(); } public ProductB factoryB(){ return new ProductB1(); } }
ConcreteCreator2.java
public class ConcretCreator2 implements Creator{ public ConcretCreator2(){ System.out.println("具體工廠2:"); } public ProductA factoryA() { return new ProductA2(); } public ProductB factoryB() { return new ProductB2(); } }
客戶端:
public class client { public static void main(String[] args){ //抽象工廠1 Creator creator1 = new ConcretCreator1(); creator1.factoryA(); creator1.factoryB(); Creator creator2 = new ConcretCreator2(); creator2.factoryA(); creator2.factoryB(); } }
輸出:
具體工廠1: 具體產品A1 具體產品B1 具體工廠2: 具體產品A2 具體產品B2