[設計模式]簡單工廠模式

簡介


簡單工廠模式 (Simple Factory) 又叫靜態工廠方法(Static Factory Method)模式。

簡單工廠模式一般是定義一個工廠類,這個類能夠根據不一樣變量返回不一樣類的產品實例
html

簡單工廠模式是一種 對象建立型模式可參考 設計模式 建立型模式)。可是簡單工廠模式 不屬於23種Gof設計模式之一。


實例


如何實現一個具備加減乘除基本功能的計算器?
設計模式

對於這四種運算來講,都須要兩個操做數,差異僅在於返回的結果不一樣。ide

由此,咱們能夠抽象化它們的共性,提煉出一個父類。這個類中包含兩個操做數,一個返回結果方法,這個方法指望在子類中得以實現。
測試

如下經過具體代碼來講明。
spa

圖-簡單工廠模式結構圖

Product (Operation) : 產品角色,簡單工廠模式所建立的全部對象的父類,它負責描述全部實例所共有的公共接口
設計

//  Product角色,全部實例所共有的公共接口
abstract  class Operation {
     public  int numA;
     public  int numB;
     public  abstract  int GetResult();
}
ConcreteProduct組 : 具體產品角色,實現 Product 中的接口。
//  ConcreteProduct 角色,實現 Product 中的接口
class Add  extends Operation {
    @Override
     public  int GetResult() {
         return numA + numB;
    }
}

// ConcreteProduct 角色,實現 Product 中的接口
class Sub  extends Operation {
    @Override
     public  int GetResult() {
         return numA - numB;
    }
}

// ConcreteProduct 角色,實現 Product 中的接口
class Mul  extends Operation {
    @Override
     public  int GetResult() {
         return numA * numB;
    }
}

// ConcreteProduct 角色,實現 Product 中的接口
class Div  extends Operation {
    @Override
     public  int GetResult() {
         if (numB == 0) {
            System.out.println("ERROR!");
             return -1;
        }
         return numA / numB;
    }
}

Factory (OperationFactory) : 工廠角色,簡單工廠模式的核心,它負責實現建立全部實例的內部邏輯。工廠類的建立產品類的方法能夠被外界直接調用,建立所需的產品對象。code

//  工廠角色,簡單工廠模式的核心,它負責實現建立全部實例的內部邏輯
class OperationFactory {
     public  static Operation CreateOperation ( char operate) {
        Operation oper =  null;
         switch(operate) {
         case '+':
            oper =  new Add();
             break;
         case '-':
            oper =  new Sub();
             break;
         case '*':
            oper =  new Mul();
             break;
         case '/':
            oper =  new Div();
             break;
         default:
             break;
        }
         return oper;
    }
}

測試代碼htm

public  class SimpleFactoryPattern {
     public  static  void main(String[] args) {
         int numA = 10;
         int numB = 3;
         int result = 0;
        Operation oper = OperationFactory.CreateOperation('+');
        oper.numA = numA;
        oper.numB = numB;
        result = oper.GetResult();
        System.out.println(numA + " + " + numB + " = " + result);
    }
}

運行結果對象

10 + 3 = 13

 

要點


優勢

簡單工廠模式的工廠類是整個模式的關鍵。其中包含了必要的邏輯判斷,根據外部信息,決定究竟應該建立哪一個具體類的對象。
blog

經過使用簡單工廠模式,用戶無需瞭解對象如何建立的,只要傳入必要信息就能夠了。

缺點

工廠類集中了全部實例的建立邏輯,違背了高內聚責任分配原則

隨着系統中具體產品類不斷增多,勢必要不斷修改工廠類,不易維護和擴展。同時,這也違背了開放封閉原則


推薦閱讀


本文屬於 設計模式系列

簡單工廠模式屬於工廠模式家族,歡迎參考閱讀 工廠方法模式抽象工廠方法模式


參考資料


《大話設計模式》 《HeadFirst設計模式》
相關文章
相關標籤/搜索