策略模式:它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的使用者。
舉乙個示例來說:乙個**機票系統,普通使用者和vip使用者都可以有三種預定和支付方式。按照普通的程式設計思路,用工廠方法或者簡單工廠,在兩種使用者的對應類裡新增設定使用者預定和支付的方法就可以了,這樣確實也可以解決問題。但是,如果我們的系統需求發生改變(這個經常吧?!),比如說支付和預定方式都增加了,我們的工廠就要相應發生改變,以致**需要重新編譯部署,這不是最好的處理方式。其實這裡支付和預定方式都是對應於具體的某種演算法,所有演算法各自完成的都是相同的工作,只是實現不同,面對演算法的變動,剝離出變化點,我們就會想到策略模式。好了,code is cheap.上**了。
類圖:
**如下:
using
system;
using
system.data;
using
system.data.sqlclient;
using
system.collections.generic;
namespace
strategypattern
//////
支付方式
///public
enum
paytype
public
inte***ce
iorder
public
class
onlineorder : iorder
}public
class
telephoneorder : iorder
}public
class
counterorder : iorder
}public
inte***ce
ipay
public
class
electronicpay : ipay
}public
class
virtualmoneypay : ipay
}public
class
cashpay : ipay}/*
策略模式
*/public
abstract
class
customer
protected
iorder tmporder;
protected
ipay tmppay;
public
void
setordertype(iorder order)
public
void
setpaytype(ipay pay)
public
void
beginoperation()
//這個可以當作簡單的模板方法模式應用
}public
class
normaluser : customer
public
newvoid
beginoperation()
}public
class
vipuser : customer
public
newvoid
beginoperation()}/*
簡單工廠模式
*/public
class
order******factory
return
order;}}
/*簡單工廠模式
*/public
class
pay******factory
return
pay;}}
public
class
program}}
上面的例項中,iorder和ipay相當於策略模式中的strategy,繼承它們的相當於具體演算法concretestrategy,而customer(或者繼承它的)類相當於context,維護對strategy物件的引用。客戶端呼叫時,可以設定不同的策略。
左右逢源 策略模式
策略模式 它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的使用者。舉乙個示例來說 乙個 機票系統,普通使用者和vip使用者都可以有三種預定和支付方式。按照普通的程式設計思路,用工廠方法或者簡單工廠,在兩種使用者的對應類裡新增設定使用者預定和支付的...