设计模式-解释器模式-java-中文版

本文通过一个简单的Dota游戏指令解析器示例,详细介绍了如何在Java中实现解释器模式。代码实例包括摇色子、Dota随机英雄模式和英雄交换等指令,帮助读者轻松理解设计模式的实际应用,降低学习难度。同时,提供了开源项目链接供进一步学习。
摘要由CSDN通过智能技术生成

码上见分晓!
中文版本的设计模式详解,案例中的代码尽量使用了中文.
以游戏和生活中较好理解的场景讲解设计模式的实际用法,便于理解吸收,让设计模式的学习不再困难!!!
更多设计模式欢迎来到我的开源项目设计模式中文版

https://gitee.com/nightrunner/chinese-version-of-design-patterns

import java.util.Random;
import java.util.Scanner;

/**
 * dota中的"-swap","-rd",'-random'等指令就可以这样实现
 */
public class 解释器模式主程序 {
    public static void main(String[] args) {
        while (true) {
            System.out.println("你可以输入如下命令后回车:");
            System.out.println("-random [数字] --摇色子");
            System.out.println("-rd --dota随机英雄模式");
            System.out.println("-swap [数字] --和第N个玩家交换英雄");
            System.out.println("-esc --退出游戏");
            Scanner 录入器 = new Scanner(System.in);
            String 输入的字符 = 录入器.nextLine();
            if (!输入的字符.startsWith("-")) {
                System.out.println("错误的语法");
            } else {
                String 输入的指令 = 输入的字符.substring(1);

                if (null == 输入的指令 || 输入的指令.length() < 1) {
                    System.out.println("未找到相应的指令,请重新输入");
                    continue;
                }

                String[] 指令 = 输入的指令.split(" ");

                String 指令名称 = null;
                String 指令参数 = null;
                if (指令.length > 1) {
                    指令名称 = 指令[0];
                    指令参数 = 指令[1];
                } else if (指令.length == 1) {
                    指令名称 = 指令[0];
                }
                指令 获取到的指令 = 获取指令(指令[0], 指令参数);


                获取到的指令.执行();
            }
        }
    }

    public static 指令 获取指令(String 字符串, String 参数) {
        if (字符串.equalsIgnoreCase("random")) {
            return new 摇色子(Integer.parseInt(参数));
        } else if (字符串.equalsIgnoreCase("esc")) {
            return new 退出();
        } else if (字符串.equalsIgnoreCase("rd")) {
            return new DOTA随机模式();
        } else if (字符串.equalsIgnoreCase("swap")) {
            return new DOTA交换英雄(Integer.parseInt(参数));
        }
        return null;
    }
}

interface 指令 {
    void 执行();
}

class 退出 implements 指令 {
    @Override
    public void 执行() {
        System.exit(0);
    }
}

class 摇色子 implements 指令 {
    Integer 参数;

    public 摇色子(Integer 参数) {
        this.参数 = 参数;
    }

    @Override
    public void 执行() {
        int 随机数 = new Random().nextInt(参数);
        System.out.println(随机数);
    }
}

class DOTA随机模式 implements 指令 {

    @Override
    public void 执行() {
        System.out.println("开启随机英雄模式");
    }
}

class DOTA交换英雄 implements 指令 {

    Integer 参数;

    public DOTA交换英雄(Integer 参数) {
        this.参数 = 参数;
    }

    @Override
    public void 执行() {
        System.out.println("与第" + 参数 + "位玩家交换英雄");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值