簡單工廠模式和策略模式的比較

2021-08-21 03:33:32 字數 2124 閱讀 5237

**結構圖的區別

首先來看一下簡單工廠模式:

再看一下策略模式:

看完他們的結構圖,是不是有種很相似的感覺?唯一不同的就是 簡單工廠類 和 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類,該類中保持對乙個策略父類的引用。該模式對策...

簡單工廠模式和策略模式

簡單工廠模式是用來當客戶端要判斷採用什麼方法時,把這部分判斷分離出來,放到工廠類中,只要輸入可以鑑別的資訊時就可了,比如計算時的符號,然後在工廠類中判斷用哪種運算類。選擇類 而策略模式中,在工廠類中呼叫的類,他的方法的引數形式可能是不同的,這時候就是不同的策略,那麼就需要建立不同的策略,這時候我們就...