工廠方法模式

2021-09-14 01:53:25 字數 3050 閱讀 1009

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 ...