簡單工廠模式

 

 

 

簡單工廠模式定義

簡單工廠模式(Simple Factory Pattern),屬於建立型模式,因爲用於建立實例的方法是靜態(static)方法,因此也被稱爲靜態工廠方法(Static Factory Method)。簡單工廠模式能夠根據參數的不一樣返回不一樣類的實例。專門定義一個類來負責建立其餘類的實例,而被建立的實例基本都有共同的父類。

簡單工廠模式適用環境

1.建立產品的工廠類負責建立的對象比較少,所以不會形成工廠方法中的業務邏輯太複雜java

2.客戶端只知道傳入工廠的類的參數,對於方法內如何建立對象不關心git

UML類圖解釋

Product:產品接口github

ProductA:具體產品Aweb

ProductB:具體產品B編程

ProductC:具體產品Csocket

ProductFactory:建立產品工廠測試

樣例代碼

package com.sedion.mynawang.Chapter01_SimpleFactoryPattern;

/**
 * 產品接口
 * @auther mynawang
 * @create 2016-12-28 16:58
 */
public interface Product {
}

  

package com.sedion.mynawang.Chapter01_SimpleFactoryPattern;

/**
 * 產品A
 * @auther mynawang
 * @create 2016-12-28 16:59
 */
public class ProductA implements Product{
}

  

package com.sedion.mynawang.Chapter01_SimpleFactoryPattern;

/**
 * 產品B
 * @auther mynawang
 * @create 2016-12-28 16:59
 */
public class ProductB implements Product{
}

  

package com.sedion.mynawang.Chapter01_SimpleFactoryPattern;

/**
 * 產品C
 * @auther mynawang
 * @create 2016-12-28 16:59
 */
public class ProductC implements Product{
}

  

package com.sedion.mynawang.Chapter01_SimpleFactoryPattern;


import java.util.logging.Logger;

/**
 * 工廠類,用來生產產品(簡單工廠類||靜態工廠類)
 * @auther mynawang
 * @create 2016-12-28 17:04
 */
public class ProductFactory {

    private static Logger logger = Logger.getLogger("ProductFactory_log");

    public static Product creatProduct(String productType) {
        Product product = null;
        if ("proA".equals(productType)) {
            product = new ProductA();
            logger.info("簡單工廠==》建立了ProductA");
        } else if ("proB".equals(productType)) {
            product = new ProductB();
            logger.info("簡單工廠==》建立了ProductB");
        } else if ("proC".equals(productType)) {
            product = new ProductC();
            logger.info("簡單工廠==》建立了ProductC");
        } else {
            logger.info("簡單工廠==》沒有這樣的產品");
        }
        return product;
    }

}

  

package com.sedion.mynawang;

import com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory;

/**
 * 簡單工廠模式測試
 * @auther mynawang
 * @create 2016-12-28 17:03
 */
public class Chapter01_SimpleFactoryPattern_test {

    public static void main(String[] args) {
        ProductFactory.creatProduct("proA");
        ProductFactory.creatProduct("proB");
        ProductFactory.creatProduct("proC");
        ProductFactory.creatProduct("proD");
    }

}

  

 

// 打印結果
Connected to the target VM, address: '127.0.0.1:52152', transport: 'socket'
十二月 28, 2016 5:27:11 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct
信息: 簡單工廠==》建立了ProductA
十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct
信息: 簡單工廠==》建立了ProductB
十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct
信息: 簡單工廠==》建立了ProductC
Disconnected from the target VM, address: '127.0.0.1:52152', transport: 'socket'
十二月 28, 2016 5:27:12 下午 com.sedion.mynawang.Chapter01_SimpleFactoryPattern.ProductFactory creatProduct
信息: 簡單工廠==》沒有這樣的產品

Process finished with exit code 0

  

 簡單工廠模式優勢

1.經過引入配置文件,能夠在不修改客戶端代碼的狀況下更換和新加具體的產品類,必定程度上提升了靈活性。加密

2.客戶端無需知道建立的具體產品類的類名,有助於對複雜類名減小記憶量。spa

3.對代碼有明顯的分工,工廠類負責製造產品類的實例,客戶端負責使用該類。code

 簡單工廠模式缺點

1.全部類都集中在工廠類中利用邏輯判斷生成,因此該類會影響整個系統。

2.簡單工廠模式將會增長系統中類的個數,增長了系統的複雜度和理解難度。

3.拓展相對困難,一旦新加產品就必須修改工廠類的邏輯,在產品類型較多時會形成工廠類的代碼過於複雜。

4.工廠類因爲使用的是靜態工廠方法,致使工廠角色沒法造成基於繼承的等級結構。

簡單工廠模式應用

1.JDK類庫中的java.text.DateFormat,用於格式化一個本地日期

public final static DateFormat getDateInstance();
public final static DateFormat getDateInstance(int style);
public final static DateFormat getDateInstance(int style,Locale locale);

2.DESEncrypt.java中獲取加密的密鑰生成器等

KeyGenerator keyGen=KeyGenerator.getInstance("DESede");

樣例代碼訪問地址:https://github.com/mynawang/Design-Pattern-Learning/tree/master/src/main/java/com/sedion/mynawang/Chapter01_SimpleFactoryPattern

 

 

 

 
博主自白

    本人20有餘,天資愚鈍,深信勤能補拙。酷愛編程,愛鑽研,廣交碼友,耕於三線,日以繼夜而使飛燕之身蛻變爲大腹便便。


有志之士點擊連接加入技術交流羣【專一的程序猿】282087535


    文章若是對你有所幫助是個人榮幸,不妥之處但願指正,轉帖請註明本文出自鈺火的小棧(http://www.mynawang.com/),請尊重他人的辛勤勞動成果,謝謝!

相關文章
相關標籤/搜索