**結構圖的區別
首先來看一下簡單工廠模式:
再看一下策略模式:
看完他們的結構圖,是不是有種很相似的感覺?唯一不同的就是 簡單工廠類 和 context類。接下來再看一下**上有什麼區別。
簡單工廠類和context類中**的區別
簡單工廠類:
public
class operationfactory
return oper;}}
策略模式中的context類:
class context
public
double
getresult(double money)
}
1.首先看一下接收的引數:簡單工廠類中的 createoperate 方法接收的是字串,返回的是乙個 operation 物件;而 context 類初始化時需要接收乙個 cashsuper物件。
2.簡單工廠類中是根據接收的條件建立乙個相應的物件,而 context 類接收的是乙個物件,可以呼叫方法去執行此物件的方法。
總結簡單工廠模式和策略模式
1.從型別上說:簡單工廠模式屬於建立型模式,而策略模式屬於行為型模式。
2.接下來,看乙個小例子:
斧子有很多種,有乙個工廠專門負責生產各種需求的斧子。
3.簡單工廠模式:根據客戶選擇的條件,來幫客戶建立乙個物件。
策略模式:客戶給它乙個建立好的物件,它來幫客戶做相應的事。
兩種模式的優缺點
首先來看一下兩種模式的客戶端**:
//簡單工廠模式的客戶端:
operation op;
//交給簡單工廠類建立物件
op = operationfactory.createoperate("+");
op.strnumbera = 10
;op.strnumberb = 20
;//呼叫生成物件的方法
double result = op.getresult();
console.writeline(result);
//策略模式的客戶端:
double total = 0;
private
void
btnok_click(object sender, eventargs e)
//計算具體策略收取的費用,交給context類執行相應的方法,客戶端只需要接收返回的值就可以
double acceptmoney = cc.getresult(convert.todouble(txtprice.text) * convert.todouble(txtnum.text));
//計算總費用
total += acceptmoney;
listbox1.items.add("單價:" + txtprice.text + " 數量:" + txtnum.text + " " + combobox1.selecteditem.tostring() + "總計:" + acceptmoney);
lblresult.text = total.tostring();
}
通過比較客戶端的**發現:
簡單工廠模式:將物件的選擇建立交給了簡單工廠類,客戶端只需要輸入相應的條件就可以,不用負責物件的建立,但是需要客戶端自己呼叫演算法類的方法。但是一旦需要增加新的運算類,比如開根運算,就要去修改簡單工廠類。
策略模式:物件的選擇建立仍需要自己來做,但是將呼叫方法的職責交給了context類。一旦需要增加新的策略需要修改客戶端。
因此,簡單工廠模式的缺點就是當有新的需求增加時,需要頻繁的修改工廠類。只用策略模式,當有新的需求增加時需要修改的是客戶端,客戶端仍然承擔著建立物件的職責,並沒有減輕客戶端的壓力。而將這兩種模式結合起來使用,則需要修改 context 類,總之不是完美的。
策略模式和簡單工廠模式
策略模式和簡單工廠模式有什麼不同額?最近在學習設計模式,遇到這兩種模式,有點兒迷糊?簡單工廠模式 public class operation return result private double numbera 0 public double numbera set private doubl...
簡單工廠模式和策略模式
兩種模式如出一轍,基本方式都是通過將相同的行為封裝在乙個抽象父類 或介面 中,然後子類繼承該抽象父類並對該相同的行為進行不同的實現。簡單工廠模式 目的在於根據不同的條件建立不同的子類,工廠類的作用就是建立類。策略模式 比簡單工廠模式多了乙個context類,該類中保持對乙個策略父類的引用。該模式對策...
簡單工廠模式和策略模式
簡單工廠模式是用來當客戶端要判斷採用什麼方法時,把這部分判斷分離出來,放到工廠類中,只要輸入可以鑑別的資訊時就可了,比如計算時的符號,然後在工廠類中判斷用哪種運算類。選擇類 而策略模式中,在工廠類中呼叫的類,他的方法的引數形式可能是不同的,這時候就是不同的策略,那麼就需要建立不同的策略,這時候我們就...