左右逢源 策略模式

2021-09-05 20:38:28 字數 2066 閱讀 5650

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

舉乙個示例來說:乙個**機票系統,普通使用者和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使用者都可以有三種預定和支付方式。按照普通的程式設計思路,用工廠方法或者簡單工廠,在兩種使用者的對應類裡新增設定使用者預定和支付的...