b: 這個和簡單工廠有什麼區別,感覺還不如簡單工廠方便,為什麼要用這個模式,到底這個模式的精髓在**?
簡單工廠模式結構圖:
工廠類的**:
class operationfactory
case "-":
case "*":
case "/":}}
}
客戶端:
operation oper;
oper = operationfactory.createoperate("+");
oper.numbera = 1;
oper.numberb = 2;
double result = oper.getresult();
工廠方法結構圖:
}/// /// 得到運算結果
///
///
public virtual double getresult()
}/// /// 加法類
///
class operationadd : operation
}/// /// 減法類
///
class operationsub : operation
}/// /// 乘法類
///
class operationmul : operation
}/// /// 除法類
///
class operationdiv : operation
}/// /// 工廠方法
///
inte***ce ifactory
/// /// 專門負責生產「+」的工廠
///
class addfactory : ifactory
}/// /// 專門負責生產「-」的工廠
///
class subfactory : ifactory
}/// /// 專門負責生產「*」的工廠
///
class mulfactory : ifactory
}/// /// 專門負責生產「/」的工廠
///
class divfactory : ifactory
}客服端:
class program
}
b: 增加其他運算,例如m數的n次方,這些功能的增加,在簡單工廠裡,我是先去加'求m數的n次方'功能類,然後去更改工廠方法,當中加入'case'語句來做判斷,現在用來工廠方法,加功能類沒有問題,再加相關的工廠類,這也沒問題,但要我再去改客服端,這不等於不但沒有減低難度,反而增加了很多類和方法,把複雜性提高了?
a: 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客服端的選擇條件動態的例項化相關的類,對於客服端來說,去除了與具體產品的依賴。但問題也就在這裡,如你所說,增加運算類,我們是一定需要給運算工廠類的方法裡加'case'的分支條件,修改原有的類?這等於說,我們不但對於擴充套件開放,對於修改也開放,這就背叛了開放-封閉原則。工廠方法就是為了解決這個。
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。工廠方法模式結構圖:
a:既然這個工廠類與分支耦合,那麼我就對它下手,根據依賴倒轉原則,我們把工廠類抽象出乙個介面,這個介面只有乙個方法,就是建立抽象產品的工廠方法。然後,所有的要生產具體產品類的工廠,就去實現這個介面,這樣,乙個簡單工廠模式的工廠類,變成了乙個工廠抽象介面和多個具體生成物件的工廠,於是增加運算類時,就不需要更改原有的工廠類了,只需要增加此功能的運算類和相應的工廠類就可以了。
a: 工廠方法模式實現時,客服端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯移到了客服端**來進行。你想要加功能,本來是改工廠類,而現在是修改客服端。
b: 老人不需要知道是誰來做好事,他只需知道是學雷鋒的人來幫忙就可以了。
class program
}//雷鋒
class leifeng
public void wash()
public void buyrice()
}//學雷鋒的大學生
class undergraduate : leifeng
//社群志願者
class volunteer : leifeng
//簡單雷鋒工廠
class ******factory
return result;
}}//雷鋒工廠
inte***ce ifactory
//學雷鋒的大學生工廠
class undergraduatefactory : ifactory
}//社群志願者工廠
class voluntee***ctory : ifactory
}
a: 簡單工廠例項化是要3遍,而工廠模式只需一次。
b: 我覺得工廠方法克服了簡單工廠違背開放-封閉原則,又保持了封裝物件建立過程的優點。
a: 由於使用了多型性,工廠方法模式保持了簡單工廠的優點,而且克服了它的缺點。但是缺點是由於每加乙個產品,就需要加乙個產品工廠的類,增加了額外的開發量。
a: 利用'反射'可以解決避免分支判斷的問題。
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...