1. 程式人生 > >《大話設計模式》——讀後感 (5)雷鋒依然在人間?——工廠方法模式

《大話設計模式》——讀後感 (5)雷鋒依然在人間?——工廠方法模式

pri sys rod 加法 完全 .cn 依賴關系 style 優點

什麽是工廠方法模式:

技術分享

工廠方法UML結構圖:

技術分享

從圖中我獲取以下信息:

1、 Product是個接口,而Creator是個抽象類(我還是試試接口)

2、ConcreateProduct和ConcreteCreator是有依賴關系的,後者依賴前者

接下來看看簡單工廠模式中例子用工廠模式實現的設計圖:

技術分享

根據設計圖。直接上代碼:

運算接口:

package com.sjmx.slpFactory;

public interface Operation {
    public double getResult(double a,double b);
}

運算加法實現類:

package
com.sjmx.slpFactory; public class OperationAdd implements Operation { @Override public double getResult(double a, double b) { return a+b; } }

運算減法實現類:

package com.sjmx.slpFactory;

public class OperationDelete implements Operation {

    @Override
    public double getResult(double
a, double b) { return a-b; } }

其他的實現類省略.............................

工廠接口:

package com.sjmx.factory;

import com.sjmx.slpFactory.Operation;

public interface Factory {
    
    Operation getOperation();
}

工廠加法實現類:

package com.sjmx.factory;

import com.sjmx.slpFactory.Operation;
import com.sjmx.slpFactory.OperationAdd; public class AddFactory implements Factory { @Override public Operation getOperation() { return new OperationAdd(); } }

工廠減法實現類:

package com.sjmx.factory;

import com.sjmx.slpFactory.Operation;
import com.sjmx.slpFactory.OperationDelete;

public class DeleteFactory implements Factory {

    @Override
    public Operation getOperation() {
         
        return new OperationDelete();
    }

}

其他實現類省略不寫了。。。

客戶端代碼:

package com.sjmx.factory;

import com.sjmx.slpFactory.Operation;

public class Client {
    
    public static void main(String[] args) {
        
        Factory f = new AddFactory();
        Operation oper = f.getOperation();    
        
        System.out.println(oper.getResult(8, 9));
        System.out.println(oper.getResult(4, 6));
        System.out.println(oper.getResult(84, 3));
        
    }
}

我不知道你看明白沒有,我通過簡單工廠VS工廠模型有以下感悟:

1、簡單工廠的工廠類中包含了具體算法的邏輯判斷,客戶端只需要知道加、減、乘等就可以得到想要的運算結果,解決了具體算法的創建問題;而且客戶端和算法沒有什麽耦合的地方

2、工廠模式把原本簡單工廠的邏輯判斷放到了客戶端去執行,增加了耦合度;但是工廠模式更好的體現了開放-閉合原則,更加的易於拓展和維護,比如,我現在需要加開根運算,平方運算等等,只需要拓展具體算法和增加算法生成工廠類就可以,完全不會去修改之前的邏輯;而簡單工廠則不需要去修改工廠類裏面的邏輯判斷。如果從這個角度去理解,其實工廠模式也還是降低了客戶端與業務的耦合度,只不過要在一定量的前提下才能體現出來。

3、兩種模式都有優點和缺點,具體應用要看實際情況而定

《大話設計模式》——讀後感 (5)雷鋒依然在人間?——工廠方法模式