您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么使用Java工廠模式創建對象及提高代碼復用率和靈活性”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么使用Java工廠模式創建對象及提高代碼復用率和靈活性”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Java工廠設計模式主要分為三種:
簡單工廠模式(Simple Factory Pattern):使用一個工廠類來封裝對象創建的過程,客戶端只需要通過傳遞不同的參數來獲取不同的產品對象,從而避免了客戶端直接創建產品對象的操作
工廠方法模式(Factory Method Pattern):將工廠類抽象出來,每個具體產品類對應一個具體工廠類,工廠類通過多態性來創建對應的產品對象,客戶端只需要知道工廠接口及其實現類即可,可以根據需求動態切換工廠實現,擴展性更好.
抽象工廠模式(Abstract Factory Pattern):在工廠方法模式的基礎上,將工廠類再進行一次抽象,將多個工廠接口放到一個工廠接口中,每個具體產品對應一個具體工廠類,通過多態性來創建對應的產品對象,具有更好的擴展性和更高的抽象程度,但是也增加了系統復雜度
首先先定義一個抽象產品類:
package com.fanqiechaodan.factory.simple.product; /** * @Classname Product * @Description 抽象產品類 */ public abstract class Product { public abstract void use(); }
然后定義具體產品類
public class ProductA extends Product{ @Override public void use() { System.out.println("使用具體產品類A..."); } } public class ProductB extends Product{ @Override public void use() { System.out.println("使用具體產品類B..."); } } public class ProductC extends Product{ @Override public void use() { System.out.println("使用具體產品類C..."); } }
接下來定義工廠類,用于創建不同的產品
package com.fanqiechaodan.factory.simple.factory; import com.fanqiechaodan.factory.simple.product.Product; import com.fanqiechaodan.factory.simple.product.ProductA; import com.fanqiechaodan.factory.simple.product.ProductB; import com.fanqiechaodan.factory.simple.product.ProductC; /** * @Classname SimpleFactory * @Description 工廠類 */ public class SimpleFactory { public static Product createProduct(String type) { switch (type) { case "A": return new ProductA(); case "B": return new ProductB(); case "C": return new ProductC(); default: throw new RuntimeException("不支持的產品類型:" + type); } } }
測試:
package com.fanqiechaodan.factory.simple; import com.fanqiechaodan.factory.simple.factory.SimpleFactory; import com.fanqiechaodan.factory.simple.product.Product; /** * @Classname Demo * @Description 簡單工廠模式 */ public class Demo { public static void main(String[] args) { Product productA = SimpleFactory.createProduct("A"); productA.use(); Product productB = SimpleFactory.createProduct("B"); productB.use(); Product productC = SimpleFactory.createProduct("C"); productC.use(); Product productD = SimpleFactory.createProduct("D"); productD.use(); } }
首先定義一個接口表示產品
package com.fanqiechaodan.factory.method.product; /** * @Classname Product * @Description 產品接口 */ public interface Product { void use(); }
其次定義兩個具體的產品實現類
public class ProductA implements Product{ @Override public void use() { System.out.println("使用具體產品A..."); } } public class ProductB implements Product{ @Override public void use() { System.out.println("使用具體產品B..."); } }
然后定義一個工廠接口用于創建產品
package com.fanqiechaodan.factory.method.factory; import com.fanqiechaodan.factory.method.product.Product; /** * @Classname Factory * @Description 工廠接口 */ public interface Factory { Product createProduct(); }
接下來,定義兩個具體的工廠實現類,分別用于創建不同的產品
public class FactoryA implements Factory{ @Override public Product createProduct() { return new ProductA(); } } public class FactoryB implements Factory{ @Override public Product createProduct() { return new ProductB(); } }
測試
package com.fanqiechaodan.factory.method.factory; import com.fanqiechaodan.factory.method.product.Product; import com.fanqiechaodan.factory.method.product.ProductB; /** * @Classname FactoryB * @Description 工廠實現類B */ public class FactoryB implements Factory{ @Override public Product createProduct() { return new ProductB(); } }
首先定義抽象產品
public interface ProductA { void doSomething(); } public interface ProductB { void doSomething(); }
其次定義具體產品
public class ProductA1 implements ProductA{ @Override public void doSomething() { System.out.println("ProductA1 doSomething ..."); } } public class ProductA2 implements ProductA{ @Override public void doSomething() { System.out.println("ProductA2 doSomething ..."); } } public class ProductB1 implements ProductB{ @Override public void doSomething() { System.out.println("ProductB1 doSomething ..."); } } public class ProductB2 implements ProductB{ @Override public void doSomething() { System.out.println("ProductB2 doSomething ..."); } }
然后定義抽象工廠
package com.fanqiechaodan.factory.abstractfactory.factory; import com.fanqiechaodan.factory.abstractfactory.product.ProductA; import com.fanqiechaodan.factory.abstractfactory.product.ProductB; /** * @Classname AbstractFactory * @Description 抽象工廠 */ public interface AbstractFactory { ProductA createProductA(); ProductB createProductB(); }
接下來定義具體工廠
public class Factory1 implements AbstractFactory{ @Override public ProductA createProductA() { return new ProductA1(); } @Override public ProductB createProductB() { return new ProductB1(); } } public class Factory2 implements AbstractFactory{ @Override public ProductA createProductA() { return new ProductA2(); } @Override public ProductB createProductB() { return new ProductB2(); } }
測試
package com.fanqiechaodan.factory.abstractfactory; import com.fanqiechaodan.factory.abstractfactory.factory.AbstractFactory; import com.fanqiechaodan.factory.abstractfactory.factory.Factory1; import com.fanqiechaodan.factory.abstractfactory.factory.Factory2; import com.fanqiechaodan.factory.abstractfactory.product.ProductA; import com.fanqiechaodan.factory.abstractfactory.product.ProductB; /** * @Classname Demo * @Description 抽象工廠模式 */ public class Demo { public static void main(String[] args) { // 使用具體工廠1創建產品A和產品B AbstractFactory factory1 = new Factory1(); ProductA productA1 = factory1.createProductA(); ProductB productB1 = factory1.createProductB(); productA1.doSomething(); productB1.doSomething(); // 使用具體工廠2創建產品A和產品B AbstractFactory factory2 = new Factory2(); ProductA productA2 = factory2.createProductA(); ProductB productB2 = factory2.createProductB(); productA2.doSomething(); productB2.doSomething(); } }
讀到這里,這篇“怎么使用Java工廠模式創建對象及提高代碼復用率和靈活性”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。