1. 程式人生 > 實用技巧 >設計模式【2】-- 簡單工廠模式瞭解一下?

設計模式【2】-- 簡單工廠模式瞭解一下?

目錄

1.簡單工廠模式介紹

工廠模式,比較常用,屬於建立型模式,也就是主要是用來建立物件的。工廠模式,有三種,主要分為:

  • 簡單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

其中,本文要講的就是,簡單工廠模式,但是簡單工廠模式,並不是屬於GoF講的23種設計模式中。簡單工廠模式,也叫靜態工廠方法模式。簡單而言,就是有一個具體的工廠類,用來生產不同型別的物件,而這些物件,都有相似的特點,它們都實現同一個介面。

什麼時候應該使用工廠模式?為什麼需要工廠模式呢?

工廠模式主要是用來生成不同的物件,也就是遮蔽了物件生成的時候的複雜性,使用的時候不需要知道物件是怎麼生成的,而只需要關注要生成什麼物件。如果構造一個物件特別的費勁,而我們又經常需要構造生成這個物件,那麼使用工廠模式是比較有利的。我們都知道,設計模式主要就是為了設計出更加簡潔,易懂,方便維護,方便拓展的程式碼。

如果一個很複雜的物件,要在多個地方構建,那麼要是改動一次,我們就需要找出所有引用的地方,逐一修改,那會很麻煩。

簡單工廠模式主要有三種角色:

  • 簡單工廠:負責建立所有的例項,依照不同的型別建立不同的物件,也就是產品。
  • 抽象產品介面:也就是所有產品的一個抽象,一般是所有產品都需要實現的介面。
  • 具體產品:實現抽象產品介面,不同的產品做不一樣的實現。

2.簡單工廠模式舉例

假設現在有一個果園,用來種植各種水果,但是每一種水果種植的方式又不一樣。首先,先定義一個介面Fruit:

public interface Fruit {
    public void process();
}

定義三種水果Apple

PearOrange:

public class Apple implements Fruit{
    public void process() {
        System.out.println("I am an Apple");
    }
}
public class Pear implements Fruit{
    public void process() {
        System.out.println("I am a Pear");
    }
}
public class Orange implements Fruit{
    public void process() {
        System.out.println("I am an Orange");
    }
}

建立一個工廠類:

public class FruitFactory {
    public static Fruit getFruit(String name) {
        if ("Apple".equalsIgnoreCase(name)) {
            return new Apple();
        } else if ("Pear".equalsIgnoreCase(name)) {
            return new Pear();
        } else if ("Orange".equalsIgnoreCase(name)) {
            return new Orange();
        }
        return null;
    }
}

測試程式碼如下:

public class FruitTest {
    public static void main(String[] args) {
        Fruit apple = FruitFactory.getFruit("Apple");
        apple.process();
        Fruit pear = FruitFactory.getFruit("Pear");
        pear.process();
        Fruit orange = FruitFactory.getFruit("Orange");
        orange.process();
    }
}

測試結果如下:

這樣的寫法,如果後續再來了一種水果,那麼只需要實現介面,同時在工廠中增加一個case即可。

3.簡單工廠模式的優劣

優點:

  • 產品和工廠的職責比較分明,工廠負責建立,產品負責自己的實現
  • 產生/構建產品比較簡單,不需要關注內部細節,只需要知道自己想要哪一種。
  • 增加或者修改產品比較簡單,解耦合。

凡事都有優劣,簡單工廠方法的缺點在於:

  • 工廠類的重要性很高,一旦出現問題,影響所有的產品。
  • 產品數量一旦特別多的時候,工廠內部邏輯會比較複雜,不利於理解和維護。
  • 靜態方法不利於繼承和實現。

從以上的優劣,我們可以知道,其實如果產品建立過程比較複雜,而且個數不多,都是依靠某些引數來建立的話,抽象出簡單工廠模式,其實是比較有利的一種做法。