您现在的位置: 启天网 >> 技术中心 >> Java >> 正文
今天是:
策略模式及实现           ★★★★★ 【字体:
策略模式及实现
作者:zhsp1029    文章来源:网络    点击数:    更新时间:2008-10-7

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

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

附件下载

文章录入:junsan    责任编辑:junsan05 
  • 上一篇文章:
  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    在java应用程序中加入发送邮件的功能
    使用反射简化对象成员的设值取值
    JAVA死锁之迷
    Java中不要裸写代码
    Java多线程杂谈
    两个变量交换的三种方法
    网站登录记忆跳转jsp实现的一种方法
    IIS+tomcat整合,并且通过域名访问网站
    Java实现按字节长度截取字符串
    Java多线程技术中所有方法的详细解析
     网友评论:(最新10条。只代表网友观点,与本站立场无关!)