—簡單工廠模式

<Java設計模式>—簡單工廠模式

簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用於創建對象的接口。

 

在簡單工廠模式中,一個工廠類處於對產品類實例化調用的中心位置上,它決定那一個產品類應當被實例化,如同一個交通警察站在來往的車輛流中,決定放行那一個方向的車輛向那一個方向流動一樣。

       先來看看它的組成:

 

        1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。

 

        2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。在java中由接口或者抽象類來實現。

 

        3) 具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。

 

下面來看下一個運算對象的簡單工程的設計模式UML:

具體的對應關係:

工廠類角色——>簡單工廠類

抽象產品角色——>運算類

具體產品角色——>加法類,減法類,乘法類,除法類

 

根據上面UML,寫咱們的代碼:

/**
* 運算類
*/
abstract class Operation{

    public double numberA;
    public double numberB;
    public abstract double getResult();
 }
/**
* 加法類(減法(OperationSub)、乘法(OperationMul)、除法(OperationDiv)請參考加法寫法)
*/
class OperationAdd extends Operation{
    public double getResult(){
       return numberA+numberB;
   }
}

/**
* 簡單工廠類
*/
class OperationFactory{

    public static final int ADD = 1;//加法
    public static final int SUB = 2;//減法
    public static final int MUL = 3;//乘法
    public static final int DIV = 4;//除法

    public Operation createOperation(int operationType){

    swtich(operationType){
           case ADD:
             return new OperationAdd();
             break;
           case SUB:
             return new OperationSub();
             break;
           case MUL:
             return new OperationMul();
             break;
           case DIV:
             return new OperationDiv();
             break;
     }
  }
}

/**
* 客戶端代碼
**/
class Client{

    public static void main(String[] args){
       Operation operation= OperationFactory.createOperation(OperationFaction.ADD);
       Operation.numberA = 22;
       Operation.numberB = 23;
       System.out.println(“遠算結果:”+operation.getResult());		
   }

}


個人總結:相對於之前直接new出對象,降低了耦合性,客戶端只要認識兩個類(Operation、OperationFactory),也就是說客戶端都無需導入像加法類,減法類等的包,客戶端只需給2數,和相應的計算方式,然後得出結果,至於你是怎麼運算,客戶端並不關心;但是有個弊端就是假如將來需要拓展,那就比較麻煩了,那我們就必須去修改OperationFactory這個類中的switch代碼,如果將來拓展很多的算法,那麼這個類將是非常臃腫的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章