我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

策略模式及实现

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

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


posted on 2008-03-07 09:39 々上善若水々 阅读(734) 评论(0)  编辑  收藏 所属分类: 数据结构与算法


只有注册用户登录后才能发表评论。


网站导航: