现在的位置: 首页 > 综合 > 正文

策略(Strategy)模式

2013年01月05日 ⁄ 综合 ⁄ 共 2071字 ⁄ 字号 评论关闭

        策略模式四个字听起来很多人都可能不是很理解,其实它就是一种简单的设计模式,举个例子啊:现在很多人都喜欢打游戏,游戏中的角色我们最熟悉不过了。角色有分为很多种,不同的角色使用不同的技能或武器。其实这就包含了策略(Strategy)模式。这个设计模式其实就是抽象类与接口的使用。假如你是新手,可以一起和我这样做。

    
1.我们来分析一下游戏里的技能,技能就是可以造成杀伤力的东西。每个角色的技能都不同。那么我们可以把“技能”单作一个接口。

  

package org.lxh.dao;

public interface WeaponBehavior {
	public void useWeapon();    //使用武器
}

 

2.接口弄好了,那么实现类呢?实现类就是对这些技能的一种细化。

  

package org.lxh.impl;

import org.lxh.dao.WeaponBehavior;

public class SwordBehavior implements WeaponBehavior {

	public void useWeapon() {
		System.out.println("用宝剑挥舞");
	}

} 
 
package org.lxh.impl;

import org.lxh.dao.WeaponBehavior;

public class KnifeBehavior implements WeaponBehavior {

	public void useWeapon() {
		System.out.println("用匕首刺杀");
	}

}
package org.lxh.impl;

import org.lxh.dao.WeaponBehavior;

public class AxeBehavior implements WeaponBehavior {

	public void useWeapon() {
		System.out.println("用斧头砍劈");
	}

}

   3.之后我们可以考虑一下,其实每个角色都会发动攻击,也就是使用武器。有时可以切换武器。这些都是每个角色的共同点。不同的则是动作的执行者,基于这些特点,我们可以把“切换武器”和“攻击”写在一个抽象类里。我是这样设计的。
 
package org.lxh.dao;

public abstract class Character {
	WeaponBehavior weapon;
	public WeaponBehavior setWeapon(WeaponBehavior wea)   //切换武器
	{
		this.weapon=wea;
		return this.weapon;
	}
	public abstract void fight();    //角色之间的打斗或搏击
}
 
   4.下面的工作就简单多了,我们可以开始写每个角色的功能了。
     这段代码表示皇帝的进攻
package org.lxh.impl;

import org.lxh.dao.Character;


public class King extends Character {
	
	SwordBehavior sw = new SwordBehavior();
	KnifeBehavior knife = new KnifeBehavior();

	public void fight() {
		
		System.out.println("皇帝开始进攻:");
		setWeapon(sw).useWeapon();
		System.out.println("切换武器之后=========");
		setWeapon(knife).useWeapon();

	}
}

下面的代码则是爵士的进攻;

 

package org.lxh.impl;

import org.lxh.dao.Character;

public class Knight extends Character{
	
	AxeBehavior axe=new AxeBehavior();
	KnifeBehavior knife=new KnifeBehavior();
	public void fight(){
		System.out.println("爵士开始进攻:");
		setWeapon(axe).useWeapon();
		System.out.println("切换武器之后=========");
		setWeapon(knife).useWeapon();
	}
}

 

当然了角色还有很多,有兴趣的话可以自己添加一些角色。

   5.编写测试类

package test;
import org.lxh.impl.King;
import org.lxh.impl.Knight;

public class Test {

	public static void main(String[] args) {
		King k=new King();
		Knight kt=new Knight();
		k.fight();
		kt.fight();
	}

}

    下面就是运行的效果截图。

 

 

 

   好了,这就是策略模式了。如果代码有错或者有看不懂的地方,可以写评论或者通过qq和我交流,我的qq号是1214273312,加我的时候请注明“csdn网友“就可以了。我一般都在线。





抱歉!评论已关闭.