启天论坛软件硬件技术Java技术 → 策略模式及实现


  共有222人关注过本帖树形打印

主题:策略模式及实现

帅哥,在线噢!
junsan
  1楼 个性首页 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 总掌门
等级:管理员 帖子:11764 积分:7955 威望:757 精华:24 注册:2005-7-14 15:13:00
策略模式及实现  发帖心情 Post By:2008-10-7 14:22:00



  策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    策略模式的好处在于你可以动态的改变对象的行为。 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:rolebase.zip

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:rolebase.zip



主页:http://www.rsky.com.cn

培训论坛:http://www.javastar.org

Blog:http://blog.csdn.net/junnef

技术交流QQ:334620162

培训咨询QQ:66883074

合租咨询QQ:631066985

MSN:junsanjin@hotmail.com

Emial:junsanjin@263.net

传真:(010)950507转747393
启天合组-专业合租空间提供商 支持(0中立(0反对(0回到顶部