您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關java怎樣實現工廠模式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
定義:
工廠模式是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。
工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。
工廠模式根據抽象程度的不同分為三種:
簡單工廠模式(也叫靜態工廠模式)
工廠方法模式(也叫多形性工廠)
抽象工廠模式(也叫工具箱)
簡單工廠模式
實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。
工廠方法模式
工廠方法是粒度很小的設計模式,因為模式的表現只是一個抽象的方法。 提前定義用于創建對象的接口,讓子類決定實例化具體的某一個類,即在工廠和產品中間增加接口,工廠不再負責產品的創建,由接口針對不同條件返回具體的類實例,由具體類實例去實現。
抽象工廠模式
當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創建多個產品對象。它有多個抽象產品類,每個抽象產品類可以派生出多個具體產品類,一個抽象工廠類,可以派生出多個具體工廠類,每個具體工廠類可以創建多個具體產品類的實例。
工廠方法模式應該在實際中用的較多,我們以工廠方法模式舉例
(例子來源百度,幫助理解)
抽象的產品類:定義car 交通工具類
public interface Car { void gotowork(); }
定義實際的產品類,總共定義兩個,bike 和bus 分別表示不同的交通工具類
public class Bike implements Car { @Override public void gotowork() { System.out.println("騎自行車去上班!"); } } public class Bus implements Car { @Override public void gotowork() { System.out.println("坐公交車去上班!"); } }
定義抽象的工廠接口
public interface ICarFactory { Car getCar(); }
具體的工廠子類,分別為每個具體的產品類創建不同的工廠子類
public class BikeFactory implements ICarFactory { @Override public Car getCar() { return new Bike(); } } public class BusFactory implements ICarFactory { @Override public Car getCar() { return new Bus(); } }
簡單的測試類,來驗證不同的工廠能夠產生不同的產品對象
public class TestFactory { @Test public void test() { ICarFactory factory = null; // bike factory = new BikeFactory(); Car bike = factory.getCar(); bike.gotowork(); // bus factory = new BusFactory(); Car bus = factory.getCar(); bus.gotowork(); } }
工廠模式的優點:
1、一個調用者想創建一個對象,只要知道其名稱就可以了,降低了耦合度。
2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。使得代碼結構更加清晰。
3、屏蔽產品的具體實現,調用者只關心產品的接口。
工廠模式的缺點:
每次增加一個產品時,都需要增加一個具體類和對象實現工廠(這里可以使用反射機制來避免),使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。所以對于簡單對象來說,使用工廠模式反而增加了復雜度。
工廠模式的適用場景:
1、 一個對象擁有很多子類。
2、創建某個對象時需要進行許多額外的操作。
3、系統后期需要經常擴展,它把對象實例化的任務交由實現類完成,擴展性好。
關于Java中的工廠模式的一些常見問題:
利用父類的向下轉型(使用父類類型的引用指向子類的對象)是可以達到類似于工廠模式的效果的,那為什么還要用工廠模式呢?
把指向子類對象的父類引用賦給子類引用叫做向下轉型,如:
Class Student extends Person Person s = new Student(); s = (Student)person ;
使用向下轉型在客戶端實例化子類的時候,嚴重依賴具體的子類的名字。當我們需要更改子類的構造方法的時候,比如增加一個參數,或者更改了子類的類名,所有的new出來的子類都需要跟著更改。
但如果我們使用工廠模式,我們僅僅需要在工廠中修改一下new的代碼,其余項目中用到此實例的都會跟著改,而不需要我們手動去操作。
關于“java怎樣實現工廠模式”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。