策略模式:定义了算法族,分别封装起来,让它们之间可相互替换,此模式让算法的变化独立于使用算法的客户。
源码地址:https://gitee.com/yang-kairui/design-pattern
我们需要定义一个抽象策略,然后实现一系列的具体策略,在我们执行的时候可以运行特定策略的类。
以释放技能为例:
先创建使用算法的客户,角色
public class Role {
/**
* 名字
*/
private String name;
/**
* 技能
*/
private Skill skill;
public void skill() {
System.out.println(name + "释放技能");
skill.skill();
}
//Getter and Setter...
}
然后创建抽象策略,技能
public interface Skill {
/**
* 释放技能
*/
void skill();
}
实现两个具体策略
public class Skill1 implements Skill{
@Override
public void skill() {
System.out.println("释放降龙十八掌");
}
}
public class Skill2 implements Skill{
@Override
public void skill() {
System.out.println("释放九阳神功");
}
}
测试一下
public class StrategeTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Role role = new Role("张三");
while (true) {
if (1 == scanner.nextInt()){
role.setSkill(new Skill1());
role.skill();
}
if (2 == scanner.nextInt()){
role.setSkill(new Skill2());
role.skill();
}
}
}
}
执行结果:
1 张三释放技能 释放降龙十八掌 2 张三释放技能 释放九阳神功
策略模式其实和状态模式很像,但是实现和用法不一样,策略模式的意图是为了拓展性和解耦。