策略模式應用 取代判斷範圍的if else語句

2021-10-17 03:26:36 字數 1914 閱讀 5304

策略模式是指包含乙個策略介面和一組實現這個介面的策略類,它的應用有很多,其中一種就是取代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...