設計模式------簡單工廠模式

    從設計模式的類型上來講,簡單工廠模式是屬於建立型模式,又叫作靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定建立出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。 html

    下面模擬使用簡單工廠模式實現的需求:java

需求:假設如今的咱們須要對數據庫中的內容進行輸出,須要依賴於一個輸出的類,但如今有兩種方式進行輸出,分別是:excel與word;(這裏我簡單模擬,所以代碼會很簡單);數據庫

  1. 首先咱們先用寫一個輸出方式的接口,代碼以下:編程

public interface Print
{
    public void outPrint();
}

2.而後須要寫出它的兩個實現類,以下:
excel方式:設計模式

public class ExcelImpl implements Print
{
    @Override
    public void outPrint()
    {
        System.out.println("使用excel進行導出");
    }
}

word方式:ide

public class WordImpl implements Print
{
    @Override
    public void outPrint()
    {
        System.out.println("使用word進行導出");
    }
}

3.而後實現一個工廠類:this

public class PrintFactory
{
    /**
     * 用於獲取print實例的方法
     * */
    public Print getPrint()
    {
        /**
         * 這裏默認返回的是excel方式進行導出
         * */
        return new ExcelImpl();
    }
}

4.進行簡單工廠方式的實現:編碼

public class DataOutput
{
    public static void main(String[] args)
    {
        /**
         * 實例化工廠類
         * */
        PrintFactory printFactory = new PrintFactory();
        /**
         * 實例化調用的類,經過構造方法來對DataOutput對象進行初始化
         * */
        DataOutput dataOutput = new DataOutput(printFactory.getPrint());
        dataOutput.output();
    }
    
    private final Print print;
    
    public DataOutput(Print print)
    {
        this.print = print;
    }
    
    /**
     * 模擬導出,這裏就是須要調用其餘對象中的方法進行實現
     */
    public void output()
    {
        print.outPrint();
    }
}

好了,接下來咱們只要點擊運行就會在控制檯出現:使用excel進行導出;
若是因爲需求的改變須要使用word來進行導出,很簡單,咱們只須要修改工廠類中的方法便可,其餘都不須要變:spa

public class PrintFactory
{
    /**
     * 用於獲取print實例的方法
     * */
    public Print getPrint()
    {
        /**
         * 這裏默認返回的是excel方式進行導出
         * */
        // return new ExcelImpl();
        /**
         * 更改成使用word方式進行導出
         * */
        return new WordImpl();
    }
}

到此咱們已經實現了一個簡單工廠模式,咱們可以很明顯的感受到該模式的優點:讓對象的調用者與對象建立過程進行分離,當對象調用者須要對象時只需直接向工廠請求便可,
從而避免了對象調用者與對象實現類以硬編碼方式進行耦合。就如上面的程序,即便Print接口有不少實現類,咱們只須要到工廠類中進行更換實現類的實例化便可,其餘不須要設計

更改,這裏也顯示了面向接口編程的優點,這樣對象的調用者就與接口進行耦合而不是與實現類,與接口耦合的好處就是接口能夠有多個實現類,保證了咱們能夠不去修改接口,

而只是添加或者修改一個實現類便可;

 總結下簡單工廠模式:不知道你們有沒有發現一個問題就是上面管理實例分配的工廠類中,如今只能每次爲其分配一個實例,若是要配置多個實例就須要在工廠類中就行邏輯

判斷:

public class PrintFactory
{
    /**
     * 用於獲取print實例的方法
     * */
    public Print getPrint(Integer param)
    {
        if(param == 1)
        {
            /**
             * 這裏默認返回的是excel方式進行導出
             * */
            return new ExcelImpl();
        }
        else if(param == 2)
        {
            /**
             * 更改成使用word方式進行導出
             * */
            return new WordImpl();
        }
        else
        {
            return null;
        }
        
    }
}

簡單工廠模式的有缺點:

優勢:該模式的核心就是工廠類,這個類中含有必要的判斷邏輯,能夠決定在何時建立哪一個產品類的實例。客戶端能夠免除直接建立產品對象的責任。

缺點:1.工廠類集中了全部產品建立邏輯,造成一個無所不知的全能類,對於這樣的類咱們很難進行控制

相關文章
相關標籤/搜索