什么是策略模式
简单的说,策略模式就是封装了方法组,能够在不同场景运用不同的方法
场景举例
比如玩游戏的时候,角色出生什么都没装备,只能用拳头打,然后随着剧情的发展会捡到木棍,刀枪等武器,觉得的进攻方式也会随之改变,这样一来,角色的不同进攻方式就可以看作一组策略
代码示例
角色有装备武器和进攻的两种行为
/**
* 角色
*/
class Boy{
/**
* 初始化拳头
*/
Boy(){
this.setiAttack( new Punches() );
}
IAttack iAttack;
public void setiAttack(IAttack iAttack) {
this.iAttack = iAttack;
System.out.println("当前武器 " + iAttack.name());
}
public void attack(){
System.out.println("进攻方式 : ");
iAttack.attacking();
}
}
/**
* 武器和 进攻方式
*/
interface IAttack{
void attacking();
String name();
}
/**
* 拳头打
*/
class Punches implements IAttack{
@Override
public String name() {
return "拳头";
}
@Override
public void attacking() {
System.out.println("揍");
}
}
/**
* 木棍打
*/
class WoodenStick implements IAttack{
@Override
public String name() {
return "木棍";
}
@Override
public void attacking() {
System.out.println("抡");
}
}
/**
* 枪
*/
class GunShoot implements IAttack{
@Override
public String name() {
return "枪";
}
@Override
public void attacking() {
System.out.println("射击");
}
}
测试代码
public class TestStrategy {
public static void main(String[] args) {
System.out.println("角色出生......... ");
Boy boy = new Boy();
boy.attack();
System.out.println("装备木棍");
IAttack iAttack = new WoodenStick();
boy.setiAttack(iAttack);
boy.attack();
System.out.println("装备枪");
iAttack = new GunShoot();
boy.setiAttack(iAttack);
boy.attack();
}
}
输出:
角色出生…
当前武器 拳头
进攻方式 :
揍
装备木棍
当前武器 木棍
进攻方式 :
抡
装备枪
当前武器 枪
进攻方式 :
射击
这种设计模式思想在于将 类的行为 与 类进行解耦,类可以动态使用各种不同的行为