慄子回顧 簡單工廠模式: "https://www.cnblogs.com/call me devil/p/10926633.html" 運算類使用工廠方法模式實現 UML圖 代碼實現 工廠介面 運算基礎類 為節省篇章,詳見 "簡單工廠模式" ,此處省略。 以下加減乘除運算類(OperationAd ...
慄子回顧
簡單工廠模式:
https://www.cnblogs.com/call-me-devil/p/10926633.html
運算類使用工廠方法模式實現
UML圖
代碼實現
工廠介面
/**
* 工廠介面
* Created by callmeDevil on 2019/7/7.
*/
public interface IFactory {
/**
* 創建運算類
*
* @return
*/
BaseOperation createOpertaion();
}
運算基礎類
為節省篇章,詳見簡單工廠模式,此處省略。
以下加減乘除運算類(OperationAdd、OperationSub、OperationMul、OperationDiv)同。
加法工廠
/**
* 加法工廠
* Created by callmeDevil on 2019/7/7.
*/
public class AddFactory implements IFactory{
@Override
public BaseOperation createOpertaion() {
return new OperationAdd();
}
}
減法工廠
/**
* 減法工廠
* Created by callmeDevil on 2019/7/7.
*/
public class SubFactory implements IFactory {
@Override
public BaseOperation createOpertaion() {
return new OperationSub();
}
}
乘法工廠
/**
* 乘法工廠
* Created by callmeDevil on 2019/7/7.
*/
public class MulFactory implements IFactory{
@Override
public BaseOperation createOpertaion() {
return new OperationMul();
}
}
除法工廠
/**
* 除法工廠
* Created by callmeDevil on 2019/7/7.
*/
public class DivFactory implements IFactory{
@Override
public BaseOperation createOpertaion() {
return new OperationDiv();
}
}
測試
/**
* 工廠方法模式測試
* Created by callmeDevil on 2019/7/7.
*/
public class Test {
public static void main(String[] args) {
IFactory operFactory = new AddFactory();
BaseOperation oper = operFactory.createOpertaion();
oper.setNumA(1);
oper.setNumB(2);
double result = oper.getResult();
System.out.println("加法測試結果:" + result);
}
}
測試結果
加法測試結果:3.0
工廠方法模式
與簡單工廠比較
簡單工廠模式的最大優點在於工廠類中,包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對於客戶端來說,去除了與具體產品的依賴。
定義
定義一個用於創建對象的介面,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
結構圖
總結
工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端代碼進行。你想要加功能,本來是改工廠類的,而現在是修改客戶端。