1. 程式人生 > >設計模式簡單介紹(Java語言)-- 工廠方法模式

設計模式簡單介紹(Java語言)-- 工廠方法模式

設計模式簡單介紹(Java語言) – 工廠方法模式

1.工廠方法模式的定義:

工廠方法模式(FACTORY METHOD)是一種常用的物件建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達到解耦、複用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品。
工廠方法模式在Java程式設計中使用的頻率非常高,檢視各種原始碼均可看見它的身影。
工廠方法模式的具體定義為
**Define an interface for creating an object ,but let subclasses decide which class to instantiate . Factory Method lets a class defer instantiation to subclass.
(定義一個用於建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。)**
類圖如下:
這裡寫圖片描述

在該模式中,抽象產品類Product負責定義產品的共性,實現對事物最抽象的定義;Creator為抽象建立類,也就是抽象工廠,具體如何建立產品類有具體的實現ConcreteCreator完成的。
工廠方法模式的變種較多,下面展示一個比較通用的原始碼。

抽象產品類

public abstract class Product {
    /**
     * 產品類的公共方法
     */

    public void method1(){
        //業務邏輯處理
    }

    //抽象方法
    public abstract void method2();
}

具體產品類

public class ConcreteProduct1 extends Product{
    /**
     * 具體產品類
     */

    @Override
    public void method2() {
        // 業務邏輯處理

    }
}
public class ConcreteProduct2 extends Product{
    /**
     * 具體產品類
     */

    @Override
    public void method2() {
        //  業務邏輯處理

    }

}

抽象工廠類

public
abstract class Creator { /** * 建立一個產品物件,其輸入引數型別可以自行設定 * 通常為String ,Enum ,Class等,當然也可以為空 */ public abstract <T extends Product> T createProduct(Class<T> c); }

具體工廠類

public class ConcreteCreator extends Creator{
    /**
     * 具體工廠類
     */

    @SuppressWarnings("unchecked")
    @Override
    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try {
            product = (Product) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            // 異常處理
        }
        return (T)product;
    }
}

場景類

public class Client {

    /**
     * 場景類
     */
    @SuppressWarnings("unused")
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product = creator.createProduct(ConcreteProduct1.class);
        /**
         * 繼續業務處理
         */
    }

}

2. 工廠方法模式的應用

2.1 工廠方法模式的優點
良好的封裝性,程式碼結構清晰。
工廠方法模式的擴充套件性非常優秀。
遮蔽產品類。
解耦。
2.2 工廠方法模式的使用場景
首先,工廠方法模式是new一個物件的替代品,所以在所有有需要的生成物件的地方都可以使用,但是需要慎重的考慮是否需要增加一個工廠類進行管理,增加程式碼的複雜度。
其次,需要靈活的,可擴張的框架時,可以考慮工廠方法模式。
再次,工廠方法模式可以用於異構專案中。
最後,可以使用在測試驅動開發的框架下。

3. 工廠方法模式的擴充套件

3.1 簡單工廠模式
當一個模組僅需要一個工廠類,沒有必要把它生產出來的時候,可以使用靜態的方法簡化工廠方法模式。但是其缺點是擴充套件困難,不符合開閉原則。
3.2 多個工廠類
為每一個產品定義一個創造者,由呼叫者自己去選擇哪個創造者獲取產品類。
缺點是擴充套件難度增加,每新增一個產品就要新增一個創造者。
3.3 替代單例模式
通過工廠方法模式可以限制例項物件數量。保證記憶體只存在一定數量的例項化數量。
3.4 延遲初始化
當一個例項化物件被使用完畢之後,並不立即釋放,工廠類保持其初始狀態,等待再次被使用。

相關推薦

設計模式簡單介紹Java語言-- 工廠方法模式

設計模式簡單介紹(Java語言) – 工廠方法模式 1.工廠方法模式的定義: 工廠方法模式(FACTORY METHOD)是一種常用的物件建立型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達到解耦

設計模式簡單介紹java語言-- 模板方法模式

設計模式簡單介紹(java語言)– 模板方法模式 模板方法模式的定義 模板方法模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 類圖: 類圖中,Abstrac

設計模式簡單介紹java語言-- 建造者模式

設計模式簡單介紹(java語言)– 建造者模式 1. 建造者模式的定義 建造者模式也叫做生成器模式,其定義如下: 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 通用類圖: 在建造者模中,通常有如下4個角色:

設計模式Java語言-單例模式

  單例模式,簡而言之就是在整個應用程式裡面有且僅有一個例項,在程式的任何時候,任何地方獲取到的該物件都是同一個物件。單例模式解決了一個全域性的類被頻繁建立和銷燬的,或者每次建立或銷燬都需要消耗大量cpu資源的物件的問題。單例模式總的可以分為懶漢模式和餓漢模式,顧名思義,懶漢模式是一個非常懶的漢子,只要你沒有

設計模式Java語言- 簡單工廠模式

  簡單工廠模式有稱為靜態工廠模式,屬於設計模式中的建立型模式。簡單工廠模式通過對外提供一個靜態方法來統一為類建立例項。簡單工廠模式的目的是實現類與類之間解耦,其次是客戶端不需要知道這個物件是如何被穿創建出來的,只需要呼叫簡單工廠模式的方法來統一建立就可以了,從而明確了各個類的職責。   一、建立簡單工廠模式

Java技術_每天掌握一種設計模式003_使用場景及簡單例項建立型:工廠方法

1.模式描述 提供一個用於建立物件的介面(工廠介面),讓其實現類(工廠實現類)決定例項化哪一個類(產品類),並且由該實現類建立對應類的例項。 2.模式作用 可以一定程度上解耦,消費者和

設計模式Java隨筆—單例模式

單例模式(Singleton Pattern):5種建立型模式中的一種,有關單例模式的所有建立方法參考:Java單例模式——並非看起來那麼簡單(總結不易,感謝!),本文中,我只對開發中常用的兩種(多執行緒)方法和Java特有的列舉法進行程式碼複寫。 首先,還是貼一下單例的定

各種高階語言簡單介紹持續更新

public class ShapeFactory { public static <T> T getClass(Class<? extends T> clazz) {

java設計模式---工廠方法模式

基本上有興趣瞭解設計模式的都會知道工廠模式,因為各種模式相關的書籍以及部落格什麼的都是以工廠模式開頭的,對於一時興起或者三天熱度的都是會看到工廠模式,但是工廠模式也是用到比較廣泛的模式,屬於建立型模式。工廠模式分為工廠方法模式和抽象工廠模式,這篇主要總結一下工廠

Java面向物件設計模式——工廠方法模式

工廠方法模式(Factory Method) 工廠方法模式分為三種: 1、普通工廠模式,就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖: 舉例如下:(我們舉一個傳送郵件和簡訊的例子) 首先,建立二者的共同介面: publici

Android平臺Camera實時濾鏡實現方法探討(十)--代碼地址以及簡單介紹20160118更新

div iss 將在 spa 方法 target 用途 net dsm 簡單做了個相機和圖片編輯模塊,時間原因非常多功能還沒有做。尚有BUG,見諒,將在以後抽時間改動 代碼地址 PS:請點個Star^-^ -----------------------

設計模式---工廠方法模式

ack cto sys alt 修改 spa 抽象類 .com desc 1、簡介:工廠方法模式是類的創建模式,又叫虛擬構造子模式或是多態性工廠模式,它的實現方式是創建一個工廠接口,將實際創建對象的的工作轉移到工廠子類中,在系統的擴展中,可以在不修改工廠角色的情況下引進新的

設計模式十八---模板方法模式

strac string package style prim res 不同的 好的 clas 1、簡介   模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。   不同的子類可以以不同

設計模式十七——模板方法模式

ring next pri cut 限制 pack [] eat 模式 1.描述 定義一個操作中算法的骨架,而將一些步驟延伸到子類當中。模板方法使子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 2.模式的使用 ·抽象模板(Abstract Template):

PAT刷題 Java語言

group ron asn extra rms cas should 語言 () 1001. A+B Format (20) 時間限制 400 ms 內存限制 65536 kB 代碼長度限制 16000 B 判題程序 Standard 作者 CHEN, Y

LVOOP設計模式在路上-- 工廠方法模式

img alt 小夥伴 分享 mage 微信公眾 pcb 相關 持續更新 LVOOP系列轉到微信公眾號持續更新,這裏將同步更新鏈接:https://mp.weixin.qq.com/s/jVMpCbZe46e1bVmrRsbv-w 對LabVIEW感興趣的小夥伴歡迎關註我的

常用軟體設計模式工廠方法模式

工廠方法模式:定義一個用於建立物件的介面,讓其子類決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行。 優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了           

P1422小玉家的電費JAVA語言

package 順序與分支; /* * 題目描述 夏天到了,各家各戶的用電量都增加了許多,相應的電費也交的更多了。 小玉家今天收到了一份電費通知單。小玉看到上面寫:據閩價電[2006]27號規定, 月用電量在150千瓦時及以下部分按每千瓦時0.4463元執行, 月用電量在151~400千瓦時的

P1423_小玉在游泳JAVA語言

 題目描述 小玉開心的在游泳,可是她很快難過的發現,自己的力氣不夠,游泳好累哦。 已知小玉第一步能遊2米,可是隨著越來越累,力氣越來越小, 她接下來的每一步都只能游出上一步距離的98%。 現在小玉想知道,如果要游到距離x米的地方,她需要遊多少步呢。 請你程式設計解決這個問題。 輸入輸出