您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java工廠模式的使用細則是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java工廠模式的使用細則是什么文章都會有所收獲,下面我們一起來看看吧。
工廠模式顧名思義就是生產實例的工廠,使用工廠模式不會在程序中使用new關鍵字創建實例。而是將創建對象的細節隱藏,對外提供統一的方法,外部通過該方法獲取實例。以此降低調用者與程序之間的耦合性,更加靈活
工廠模式可以分為三類
簡單工廠模式
工廠方法模式
抽象工廠模式
定義一個接口,將創建對象和其本身的業務分離解耦,如下示例:
public interface Pet { void shout(); } public class Cat implements Pet{ public void shout() { System.out.println("貓叫"); } } public class Dog implements Pet{ public void shout() { System.out.println("狗叫"); } } // 寵物工廠 public class PetFactory { // 方式一 public static Pet getPet(String pet) { if (pet.equals("小貓")) { return new Cat(); } else if (pet.equals("小狗")) { return new Dog(); } else { return null; } } // 方式二 public static Pet getCat(){ return new Cat(); } public static Pet getDog(){ return new Dog(); } } // 用戶類 public class Customer { public static void main(String[] args) { Pet pet = PetFactory.getPet("小貓"); pet.shout(); } } // 輸出 : 貓叫
如上述代碼所示,創建對象只需要直接調用PetFactory工廠的創建方法即可,根據用戶需求來創建指定對象,執行對應方法
工廠方法模式相對于簡單工廠,提高了拓展性,可以在不影響原有類的情況下實現橫向擴展其他類,但是代碼量加大,可能會產生更多的代碼冗余。
我們針對每一個類都為其設置單獨的工廠,即每個工廠只生產一種類型,如果在需要新增其他類型那么只需要創建其工廠提供獲取實例方法即可
public interface Pet { void shout(); } public class Cat implements Pet { public void shout() { System.out.println("貓叫"); } } public class CatFactory { public static Pet getCat(){ return new Cat(); } } public class Customer { public static void main(String[] args) { Pet cat = CatFactory.getCat(); cat.shout(); } }
使用工廠方法模式可以再不修改原有代碼的基礎上繼續擴展,但是工作量較大
對比簡單工廠和工廠方法模式:就代碼和結構的復雜度,使用簡單工廠模式更加簡便,但是對于可拓展性則工廠方法模式更加優越
抽象工廠用于常見一系列相關對象的家族,抽象的意思是,我們會定義一個工廠接口并且不做任何實現,只用來約束它的實現工廠生產產品的規范。
四大核心:抽象工廠、具體工廠、抽象產品、具體產品
以華為、小米生產手機和電視為例:
代碼如下:
// 工廠接口 public interface ProductFactory { RouterProduct getRouter(); // 生產路由器 PhoneProduct getPhone(); // 生產手機 } // 手機、路由器接口 public interface PhoneProduct { void close();} public interface RouterProduct {void start();} // 工廠 public class HuaweiFactory implements ProductFactory{ public RouterProduct getRouter() {return new HuaweiRouter();} public PhoneProduct getPhone() { return new HuaweiPhone(); } } public class XiaoMiFactory implements ProductFactory{ public RouterProduct getRouter() { return new XiaoMiRouter(); } public PhoneProduct getPhone() { return new XiaoMiPhone(); } } // 測試 public static void main(String[] args) { // 拿到工廠對象 XiaoMiFactory miFactory = new XiaoMiFactory(); HuaweiFactory huaweiFactory = new HuaweiFactory(); // 小米工廠生產 PhoneProduct miFactoryPhone = miFactory.getPhone(); miFactoryPhone.close(); RouterProduct router = miFactory.getRouter(); router.start(); // 華為工廠生產 PhoneProduct phone = huaweiFactory.getPhone(); phone.close(); RouterProduct router1 = huaweiFactory.getRouter(); router1.start(); }
還有其他的產品接口實現類,華為手機、小米手機、華為路由器等等
同樣的抽象工廠模式也可以進行擴展但是比較繁瑣,需要再頂級工廠也就是工廠接口中去擴展,但是擴展之后其所有的實現類也都需要完成實現。如果是長期穩定狀態下可以這樣擴展,但是經常改動的話抽象工廠模式就顯得非常雞肋
關于“Java工廠模式的使用細則是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java工廠模式的使用細則是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。