策略模式及實現
策略模式,又叫算法簇模式,就是定義了不同的算法族,并且之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。
策略模式的好處在于你可以動態的改變對象的行為。 設計原則是把一個類中經常改變或者將來可能改變的部分提取出來,作為一個接口(c++z中可以用虛類),然后在類中包含這個對象的實例,這樣類的實例在運行時就可以隨意調用實現了這個接口的類的行為。下面是一個例子。
/*
這是一個表現僧人和道士的程序,僧人光頭,使用棍子做武器,道士長小胡子,使用拂塵作武器
*/

//處理長相接口
interface LooksBehavier
{
public void display();
}
//處理所使用的武器接口
interface WeaponBehavier
{
public void useWeapon();
}

//角色基類
class Role {
public int heght; //身高
public int sex; //性別
public WeaponBehavier weapon; //處理武器接口的實例
public LooksBehavier looks; //處理長相的接口的實例
public void display() //顯示長相
{
looks.display();
}

public void weapon() //設置所使用的武器
{
weapon.useWeapon();
}

}

//道士長相類,實現了長相接口
class TaoistBehavier implements LooksBehavier
{
public void display() //實現接口函數
{
System.out.println("I'm a taolist with long white goatee");
}

}

//和尚長相類,實現了長相接口
class BonzeBehavier implements LooksBehavier
{
public void display() //實現接口函數
{
System.out.println("I'm a Bonze with no hair");
}

}

//道士武器類,實現了處理武器接口
class TaoistWeapon implements WeaponBehavier
{
public void useWeapon() //實現了處理武器接口函數
{
System.out.println("My weapon is horsetail whisk");;
}
}

//和尚武器類,實現了處理武器接口
class BonzeWeapon implements WeaponBehavier
{
public void useWeapon() //實現了處理武器接口函數
{
System.out.println("My weapon is truncheon");;
}
}

//道士
class Taoist extends Role
{
public Taoist()
{
looks = new TaoistBehavier();
weapon = new TaoistWeapon();
}
}

//和尚
class Bonze extends Role
{
public Bonze()
{
looks = new BonzeBehavier();
weapon = new BonzeWeapon();
}
public void changeWeapon()
{
weapon = new TaoistWeapon();
System.out.println("change weapon");
}
}

public class RoleBase{
public static void main(String [] arg)
{
Taoist taoistObj = new Taoist();
Bonze bonzeObj = new Bonze();
taoistObj.display();
taoistObj.weapon();
bonzeObj.display();
bonzeObj.weapon();
bonzeObj.changeWeapon(); //改變和尚使用的武器
bonzeObj.weapon();
}
}

輸出結果為:
I'm a taolist with long white goatee
My weapon is horsetail whisk
I'm a Bonze with no hair
My weapon is truncheon
change weapon
My weapon is horsetail whisk
策略模式的好處在于你可以動態的改變對象的行為。 設計原則是把一個類中經常改變或者將來可能改變的部分提取出來,作為一個接口(c++z中可以用虛類),然后在類中包含這個對象的實例,這樣類的實例在運行時就可以隨意調用實現了這個接口的類的行為。下面是一個例子。
















































































































輸出結果為:







posted on 2008-03-07 09:39 々上善若水々 閱讀(755) 評論(0) 編輯 收藏 所屬分類: 數據結構與算法