設計模式之策略模式

策略模式的定義:定義一組算法,分別封裝起來,讓他們之間可以相互替換(算法類實現同一個接口),此模式讓算法的變化獨立於使用算法的客戶。

如定義這樣一個玩家類:

class Player{
public Player(){
}
//根據不同的距離採取不同的攻擊
pubilc void attack(double distance){
if(distance<5)
//攻擊算法1
else if(distance<10)
//射擊算法2
else if
...
}
...
}

我們知道,玩家需要根據不同的距離採取不同的攻擊方法,但這樣一來不但使玩家類的fire方法顯得冗長,而且一旦有新的變化加入,或者算法需要改變,還要去修改類的內容,不符合類的設計原則。
因此,我們可以將不同的攻擊算法封裝成類,並且讓他們實現同一個接口:

interface AttackMode{
public void attack();
}
classimplements AttackMode{
public void attack(){
...
}
}
classimplements AttackMode{
public void attack(){
...
}
}

再將我們的玩家類修改下:

class Player{
private AttackMode attachMode;
public Player(AttackMode attackMode){
this.attackMode=attackMode;
}
public void setAttackMode(AttackMode attackMode){
this.attackMode=attackMode;
}
pubilc void attack(){
attackMode.attack();
}

這樣我們就將算法的實現與客戶代碼分離開來,在外部代碼根據不同的情況,通過set方法設置不同算法即可,即使以後出現變化也不用修改玩家類。

發佈了25 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章