C 設計模式一一策略模式

2021-09-12 22:58:34 字數 2496 閱讀 3960

它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。

策略模式是對演算法的包裝,是把使用演算法的責任和演算法本身分割開,委派給不同的物件負責。策略模式通常把一系列的演算法包裝到一系列的策略類裡面。用一句話慨括策略模式就是——「將每個演算法封裝到不同的策略類中,使得它們可以互換」。

下面是策略模式的結構圖:

該模式涉及到三個角色:

實現如下收費應用:

(1) 簡單工廠模式實現

abstract class cashsuper

class cashnormal : cashsuper

}

class cashrebate : cashsuper

public override double acceptcash( double money )

}

class cashreturn : cashsuper

public override double acceptcash( double money )

return result;

}}

構造簡單工廠模式:負責生產物件的乙個類,本例負責生產收費方式的乙個類

/// /// 簡單工廠模式:負責生產物件的乙個類,本例負責生產收費方式的乙個類

///

class cashfactory

return cs;

}}

介面顯示及呼叫:

private void form1_load( object sender, eventargs e )

); cbxtype.selectedindex = 0;

}

double total = 0;

private void btnok_click( object sender, eventargs e )

(2) 策略模式實現

/// /// 策略模式

///

class cashcontext

public double getresult( double money )

}

策略模式呼叫:

double total = 0;

private void btnok_click( object sender, eventargs e )

double totalprice = 0;

// totalprice = cc.getresult( convert.todouble( textprice.text ) * convert.todouble( textnum.text ) );

total += totalprice;

lbxlist.items.add( "單價:" + textprice.text + "數量:" + textnum.text + " "

+ cbxtype.selecteditem + "合計:" + totalprice.tostring( ) );

lblresult.text = total.tostring( );

}

(3) 策略模式+簡單工廠模式實現為了把策略模式中的判斷過程從客戶端移走(即從btnok_click函式中移走),需要利用簡單工廠模式將負責生產收費物件整合到cashcontext類中去,如下所示:

/// /// 策略模式+簡單工廠模式

///

class cashcontext

} public double getresult( double money )

}

這樣,客戶端呼叫只要認識cashcontext類就可以了,耦合度相比簡單工廠模式就大大降低了。(簡單工廠模式需要讓客戶端認識cashsuper類和cashfactory類)。

double total = 0;

private void btnok_click( object sender, eventargs e )

優點:

缺點:

在下面的情況下可以考慮使用策略模式:

乙個系統需要動態地在幾種演算法中選擇一種的情況下。那麼這些演算法可以包裝到乙個個具體的演算法類裡面,並為這些具體的演算法類提供乙個統一的介面。

c 設計模式 策略模式

策略模式,看完策略模式最大的感受就是將所有的演算法封裝起來,讓它們之間可以相互替換,這個模式讓演算法的變化不會影響到使用者。我寫的例子還是之前的那個簡易計算器,策略模式可以和簡單工廠模式結合,在客戶端中只需認識乙個concent類,將所有的演算法物件建立以及演算法的使用全部封裝在乙個類中,即conc...

C 設計模式 策略模式

策略模式 定義了演算法家族,分別封裝起來,然後定義乙個統一的藉口,演算法之間可以相互替換。使用該模式可以讓演算法的變化不影響到使用演算法的客戶。模式實現 策略模式具體實現時通常與工廠模式相結合,定義乙個工廠類,來決定初始化哪個演算法。如下 include using namespace std en...

C 設計模式 策略模式

c 設計模式 策略模式 策略模式就是將多種演算法類進行封裝,每個演算法類都繼承於乙個基類a,然後重寫乙個新類b,在這個新類裡定義乙個基類a的物件,然後在新類b的建構函式中對基類a的物件進行賦值,這種方法需要對b的建構函式傳引數,如果需要不傳引數,則可以寫成模板的形式,以下是 include usin...