策略(Strategy)模式
程序员文章站
2022-07-13 17:17:00
...
策略模式四个字听起来很多人都可能不是很理解,其实它就是一种简单的设计模式,举个例子啊:现在很多人都喜欢打游戏,游戏中的角色我们最熟悉不过了。角色有分为很多种,不同的角色使用不同的技能或武器。其实这就包含了策略(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网友“就可以了。我一般都在线。
上一篇: ncnn交叉编译
下一篇: 【word】调整字宽