首页 > 其他分享 >软件设计:实验17:解释器模式(选作)

软件设计:实验17:解释器模式(选作)

时间:2024-11-28 21:12:06浏览次数:12  
标签:选作 17 软件设计 Expression void command expression public String

实验17:解释器模式选作

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解解释器模式的动机,掌握该模式的结构;

2、能够利用解释器模式解决实际问题。

 

[实验任务一]:解释器模式

某机器人控制程序包含一些简单的英文指令,其文法规则如下:

expression ::= direction action distance | composite

composite ::= expression and expression

direction ::= ‘up’ | ‘down’ | ‘left’ | ‘right’

action ::= ‘move’ | ‘run’

distance ::= an integer //一个整数值

如输入:up move 5,则输出“向上移动5个单位”;输入:down run 10 and left move 20,则输出“向下移动10个单位再向左移动20个单位”。

实验要求:

1. 提交类图;

2. 提交源代码;

3. 注意编程规范。

1.

 

2.// 抽象表达式

interface Expression {

    void interpret(String command);

}

 

// 方向终结符表达式

class Direction implements Expression {

    public void interpret(String command) {

        // 解释方向命令

        System.out.print(command + " ");

    }

}

 

// 动作终结符表达式

class Action implements Expression {

    public void interpret(String command) {

        // 解释动作命令

        System.out.print(command + " ");

    }

}

 

// 距离终结符表达式

class Distance implements Expression {

    public void interpret(String command) {

        // 解释距离命令

        System.out.println(command + "个单位");

    }

}

 

// 复合表达式

class Composite implements Expression {

    private List<Expression> expressions = new ArrayList<>();

 

    public void addExpression(Expression expr) {

        expressions.add(expr);

    }

 

    public void interpret(String command) {

        for (Expression expr : expressions) {

            expr.interpret(command);

        }

    }

}

 

// 上下文

class Context {

    public String getCommand() {

        // 返回当前命令

        return "up move 5";

    }

}

 

// 客户端

public class Client {

    public static void main(String[] args) {

        Context context = new Context();

        Expression expression = new Composite();

        expression.addExpression(new Direction());

        expression.addExpression(new Action());

        expression.addExpression(new Distance());

        

        // 解释命令

        expression.interpret(context.getCommand());

    }

}

标签:选作,17,软件设计,Expression,void,command,expression,public,String
From: https://www.cnblogs.com/xuan-2004/p/18575181

相关文章

  • 软件设计: 实验19:中介者模式
    实验19:中介者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解中介者模式的动机,掌握该模式的结构;2、能够利用中介者模式解决实际问题。 [实验任务一]:虚拟聊天室在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具......
  • [比赛记录]ARC174
    Finalranking:\(820\)。A平凡题。不妨设选定操作的区间为\([l,r]\),这一段的和为\(s\)。如果\(c>0\),则相对于原来的数组来说,操作后的和增加了\((c-1)\timess\)。我们期望选择最大的\(s\)来获得最大的增量。很显然我们需要求最大子段和。如果\(c<0\),则相对于......
  • [gym 100917F] Find the Length
    算法转化题意:给出一个无向正权无自环图要求对于每个点经过它的最短"简单环"的长度有一种错误的思路,对于每次询问我们以该点\(s\)作为起点先处理出到其余每点的最短路,从一条边走回来即可这个思路容易找到反例,具体的,我们显然可以发现如果\(s\)分别到\(u\)和......
  • 1179 Chemical Equation(搜索 + 回溯)
     先把各产物对应的公式按题面要求的从小到大进行排序(丢set里让他自己排序就行),搜索条件有两个:1.每个原料最多使用一次2.每个产物都要被生成排序后,搜索得到的第一个解就是最优解。1#include<bits/stdc++.h>2usingnamespacestd;3intn,m,k;4vector<str......
  • 20222417 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容1.1本周内容总结Metasploit是一个功能强大的渗透测试框架,广泛应用于漏洞利用、攻击模拟和安全评估。Metasploit包含六大模块,包括辅助模块(Aux)、攻击模块(Exploit)、后渗透攻击模块(Post)、攻击载荷模块(Payload)、空指令模块(Nops)和编码器模块(Encoders)。这些模块使得Metasplo......
  • GitLab 发布安全补丁版本17.6.1, 17.5.3, 17.4.5
    本分分享极狐GitLab补丁版本17.6.1,17.5.3,17.4.5的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLabSaaS,技术团队已经进行了升级,无需用户采取任何措施。极狐GitLab正式推出面向GitLab......
  • [题解]CF1775E The Human Equation
    来个另类解。思路手玩一下样例,发现减法只会用在正数上,加法只会用在负数上,大概是因为如何在负数上用了减法或在正数上用了加法,都需要额外的次数去消掉。然后注意到在两个正数中间包这的所有负数可以直接缩成一个数,两个负数中间包着的所有正数也可以直接缩成一个数。那么现在的序......
  • P1217 [USACO1.5] 回文质数 Prime Palindromes
    标题:P1217[USACO1.5]回文质数PrimePalindromes链接:https://www.luogu.com.cn/problem/P1217思路:1.暴力枚举,超时2.回文和质数共同判断,超时3.数字通过strings=to_string(n);转化为字符串,超时+:字符串转为数字intx=stoi(n);4.找规律,有偶数位的回文数(除了11)必然不是质数......
  • Z2400017基于Java+mysql+SpringBoot+Vue实现的社区博客系统 源码 PPT 配置 文档
    社区博客系统1.项目概述2.系统功能3.技术栈及运行环境4.界面展示5.源码获取1.项目概述社区博客系统是一个基于SpringBoot和Vue.js构建的全栈Web应用程序,旨在为用户提供一个功能丰富、互动性强且易于管理的博客平台。该系统结合了现代Web开发中最先进的技术栈,确保了......
  • 软件设计:实验2:简单工厂模式
    实验2:简单工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解简单工厂模式的动机,掌握该模式的结构;2、能够利用简单工厂模式解决实际问题。 [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参......