Java设计模式-策略模式

前言

最近看设计模式的书籍,觉得很难理解,跟着书本敲代码又没什么长进,索性想了一个比较好玩的方式来学习设计模式。我曾经是一个游戏迷,特别喜欢玩一款回合制策略游戏:超级机器人大战(Super Robot War:简称SRW),于是我就打算把设计模式的思想来到游戏里面,增进自己的理解。
第一篇设计模式打算写策略模式,通过策略模式模拟机体的各种行动。

背景

SRW是回合制游戏,每回合玩家需要控制机体完成一次行动,行动有三种:移动、攻击和精神。

  • 移动:机体移动一定的格数
  • 攻击:机体选择武器攻击敌人
  • 精神:选中某种能力,使机体拥有该能力。比如必闪,表示该回合机体一定能够躲避敌人攻击
实现

行为接口:所有行为都必须实现Behavior接口

/**
 * 机体的行动
 */
public interface Behavior {
    
    void action();
    
}

移动行为:机体的移动行为

/**
 * 移动机体
 */
public class MoveBehavior implements Behavior {

    @Override
    public void action() {
        System.out.println("移动5格!");
    }

}

攻击行为:机体的攻击行为

/**
 * 对敌人发动攻击
 */
public class AttackBehavior implements Behavior {

    @Override
    public void action() {
        System.out.println("左轮打桩机!");
    }

}

精神行为:机体使用精神的行为

/**
 * 使用精神指令,如必闪,一回合内必定躲避敌人的攻击
 */
public class SpiritBehavior implements Behavior {

    @Override
    public void action() {
        System.out.println("热集必闪!");
    }

}

错误行为:机体错误的行为

/**
 * 错误的行为
 */
public class WrongBehavior implements Behavior {

    @Override
    public void action() {
        System.out.println("错误的行为!");
    }

}

行为上下文:叫BehaviorContext好拗口~~

public class BehaviorContext {

    private Behavior behavior;

    public BehaviorContext(Behavior behavior) {
        super();
        this.behavior = behavior;
    }
    
    public void action() {
        behavior.action();
    }
    
}

开玩:?O(∩_∩)O

/**
 * srw策略模式
 */
public class BehaviorTest {

    public static void main(String[] args) {
        System.out.println("请选择行动方式(输入数字):");
        System.out.println("1.移动");
        System.out.println("2.攻击");
        System.out.println("3.精神");
        
        Behavior behavior = null;
        BehaviorContext context = null;
        
        Scanner sc = new Scanner(System.in); 
        int number = sc.nextInt();
        while (number != 0) {
            switch (number) {
            case 1:
                behavior = new MoveBehavior();
                break;
            case 2:
                behavior = new AttackBehavior();
                break;
            case 3:
                behavior = new SpiritBehavior();
                break;
            default:
                behavior = new WrongBehavior();
                break;
            }
            context = new BehaviorContext(behavior);
            context.action();
            number = sc.nextInt();
        }
        
    }
    
}

输出结果

请选择行动方式(输入数字):
1.移动
2.攻击
3.精神
1
移动5格!
2
左轮打桩机!
3
热集必闪!
4
错误的行为!
0

总结

使用策略模式模拟机体的三种行为:移动、攻击和精神。是不是觉得很有趣(一点都不)?希望给大家带来不一样的设计模式博客,如果你是机战迷,你会觉得很亲切~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值