您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java怎么實現工廠方法設計模式”,在日常操作中,相信很多人在Java怎么實現工廠方法設計模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java怎么實現工廠方法設計模式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
工廠方法模式使我們能夠在不將創建邏輯暴露給客戶端的情況下創建對象,并使用通用接口引用新創建的對象。它是最廣泛使用的創作模式之一。
此模式也稱為 虛擬構造函數。
根據 Gamma等人的Design Patterns,這種模式的目的 是:
定義用于創建對象的接口,但讓子類決定實例化哪個類。Factory方法允許類將實例化延遲到子類。
Factory方法用于創建對象。超類指定所有標準和通用行為,然后將創建詳細信息委托給客戶端提供的子類。
Factory方法使設計更具可定制性,而且更復雜一些。其他設計模式需要新類,而Factory只需要新操作。
工廠方法模式的結構如下圖所示:
圖:工廠方法模式的結構
如今,static
類的 方法通常用作返回所需類類型的對象的工廠方法。與構造函數不同,它返回的實際對象可能是子類的實例,也可能重用現有對象,而不是創建新對象。
使用a factory
代替a的一個 優點 constructor
是 factory
方法可以具有不同的和更具描述性的名稱。
讓我們考慮一個根據客戶需求繪制不同幾何形狀的應用程序。應用程序的類圖如下所示:
圖:工廠方法模式示例
所述 ShapeFactory
類具有靜態方法getShape()
,它返回 GeometricShape
字符串名稱輸入的基礎上對象。
我們已經介紹了上面討論的應用程序的Java實現。
讓我們首先為產品制作一個接口factory
。
/ **
*產品界面
* /
公共 界面 GeometricShape {
void draw();
}
以下是上述接口的實現:
/ **
*混凝土產品
* /
public class Line 實現 GeometricShape {
@覆蓋
public void draw(){
系統。出。println(“Line Drawn。”);
}
}
/ **
*混凝土產品
* /
public class Rectangle 實現 GeometricShape {
@覆蓋
public void draw(){
系統。出。println(“繪制矩形。”);
}
}
/ **
*混凝土產品
* /
public class Circle 實現 GeometricShape {
@覆蓋
public void draw(){
系統。出。println(“繪制圓圈”。);
}
}
我添加了以下枚舉來命名形狀:
public enum ShapeType {
LINE,
CIRCLE,
RECTANGLE,
三角形
}
現在,讓我們創建一個 factory
提供產品的產品(在本例中 GeometricShape
):
/ **
*混凝土產品
* /
公共 抽象 類 ShapeFactory {
public static GeometricShape getShape(ShapeType name){
GeometricShape shape = null ;
開關(名字){
案例 LINE:
shape = new Line();
打破 ;
案例 CIRCLE:
shape = new Circle();
打破 ;
案例 RECTANGLE:
shape = new Rectangle();
打破 ;
}
回歸 形狀 ;
}
}
應用程序的客戶端提供所需形狀的名稱,如下所示。
/ **
*客戶
* /
公共 類 申請 {
public static void main(String [] args){
//請求圓形
GeometricShape circle = ShapeFactory。getShape(ShapeType。CIRCLE);
if(circle != null){
圈子。draw();
} else {
系統。出。println(“此形狀無法繪制。”);
}
//請求不存在的形狀
GeometricShape triangle = ShapeFactory。getShape(ShapeType。三角);
if(triangle != null){
三角形。draw();
} else {
系統。出。println(“此形狀無法繪制”);
}
}
}
該計劃的輸出是:
圈 被 繪制。
這個 形狀 可以“噸繪制
由于存在圓形,Circle
因此返回有效 對象。但是,沒有帶三角形的類,因此無法繪制形狀。
到此,關于“Java怎么實現工廠方法設計模式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。