策略模式是指包含乙個策略介面和一組實現這個介面的策略類,它的應用有很多,其中一種就是取代if…else語句,來看個例子
有這樣乙個需求,乙個檔案裡可能存放著大概0~100g的用逗號分隔開的數字,要求根據檔案的大小選擇不同的演算法,對檔案中的數字進行排序
一開始**是這樣的
public
void
sortfile
(string filepath)
else
if(filesize <
10* gb )
else
if(filesize <
100* gb)
else
}
通過觀察我們知道所有的**都需要乙個排序演算法,根據策略模式的要求,引入乙個介面
public
inte***ce
sort
不同的演算法都實現這個介面,並在其中實現排序,類似這樣,其他演算法也如此
public
class
concurrentexternalsort
implements
sort
}
一般來說會在工廠中註冊這些方法,當用的時候,根據type即可取出
public
class
sortfactory
public
static sort getsort
(string type)
}
也就有了第二版的改造,這裡我們傳乙個type到工廠中便取得相應的排序類了
private
static
final
long gb =
1000
*1000
*1000
;public
void
sortfile
(string filepath)
elseif(
6* gb < filesize && filesize <
10* gb )
else
if(filesize <
10* gb && filesize <
100* gb)
else
}
如果能夠取掉if…else的話就更好了,首先if…else判斷的是乙個範圍,那麼就可以設計乙個範圍的開始和結束,呼叫者傳乙個比較值進來,那麼通過for迴圈乙個個判斷,就可以根據範圍獲取到相應的排序演算法了
public
class
sortnoif
public
sortnoif
(long start,
long end, sort sort)
public
static sortnoif getsort
(long size)
for(sortnoif onesort:allsortclass)
}return null;
}public
long
getstart()
public
long
getend()
public learn.clms.clms.yl.sort getsort()
}
所以你可以看到,用策略模式取代判斷範圍的if…else語句後,**會變得簡潔
public
class
sortfile3
public
static
void
main
(string[
] args)
}
策略模式的典型應用
做了乙個小東西,裡面有多個角色,每個角色都有特殊的選單項,現使用策略模式對其簡單實現。關於策略模式的介紹請參考其他書籍。下面是專案架構和實現 架構 實現 imenustrategy.cs using system using system.collections.generic using syst...
策略模式的典型應用
做了乙個小東西,裡面有多個角色,每個角色都有特殊的選單項,現使用策略模式對其簡單實現。關於策略模式的介紹請參考其他書籍。下面是專案架構和實現 架構 實現 imenustrategy.cs using system using system.collections.generic using syst...
策略模式典型應用
filenamefilter 這個介面,它在 io 包下面。這個介面只有乙個方法。boolean accept file dir,string name 這個方法只有乙個用處,就是給 file 類裡面的 list 方法呼叫。public string list filenamefilter filt...