命令模式实例计算器

简介: 命令模式实例计算器

使用命令模式岩石和简单的计算器功能,并允许执行UNDO和REDO

UML图
在这里插入图片描述
代码

package 命令模式;

public class Caculator {
private int total;
 
public Caculator() {
    
    this.total = 0;
}
 
public void Operation(char op,int num)
{switch(op)
    {case '+':total+=num;break;
    case '-':total-=num;break;
    case '*':total*=num;break;
    case '/':total/=num;break;
}
System.out.println(op+" "+num+"="+total);
 
}
}
package 命令模式;

public class CalCommand extends Command {
 
    public CalCommand(Caculator cal, char op, int num) {
        super(cal, op, num);
        
    }
 
    @Override
    public void Execute() {
    cal.Operation(op, num);
    }
 
    @Override
    public void UnExecute() {
        cal.Operation(undo(op), num);
 
    }
    private char undo(char op)
    {char undo=' ';
    switch(op)
    {case '+':undo='-';break;
    case '-':undo='+'; break;
    case '*':undo='/';break;
    case '/': undo='*'; break;
    }
    return undo;
    }
 
}
package 命令模式;

public abstract class Command {
    protected Caculator cal;
    protected char op;;
    protected int num;
    
public Command(Caculator cal, char op, int num) {
        
        this.cal = cal;
        this.op = op;
        this.num = num;
    }
public abstract void Execute();
public abstract void UnExecute();
}
package 命令模式;

import java.util.ArrayList;
 
public class User {
private ArrayList<Command>commands=new ArrayList<Command>();
private int count=0;
public void Compute(Command command)
{command.Execute();
count++;
commands.add(command);
 
}
public void Redo(int levels)
{for(int i=0;i<levels;i++)
{if(count<commands.size())
    {count++;
    commands.get(count-1).Execute();
 
}
}
}
public void Undo(int levels)
{for(int i=0;i<levels;i++)
    if(count>0)
    {
        commands.get(count-1).UnExecute();
    count--;
    }
}
}
目录
相关文章
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
449 14
|
8月前
|
Web App开发 前端开发 JavaScript
Promise.allSettled()方法的兼容性如何?
Promise.allSettled()方法的兼容性如何?
487 75
|
11月前
|
Web App开发 缓存 安全
Chrome浏览器启动参数大全
这是一组用于定制浏览器行为的命令行参数,包括但不限于:不停用过期插件、放行非安全内容、允许应用中心脚本、停用GPU加速视频、禁用桌面通知、禁用拓展及各类API、调整缓存设置、启用打印预览、隐身模式启动、设定语言、使用代理服务器、无头模式运行等。通过这些参数,用户可以根据需求灵活调整浏览器功能与性能。
|
机器学习/深度学习 人工智能 算法
「我在淘天做技术」迈步从头越-阿里妈妈广告智能决策技术的演进之路
随着智能化营销产品和机器学习的发展,阿里妈妈将深度学习和强化学习等AI技术越来越多地应用到广告智能决策领域。本文将以阿里妈妈广告智能决策技术的演进为例,分享我们工作和思考。
|
监控 安全 Java
【JavaEE多线程】深入解析Java并发工具类与应用实践
【JavaEE多线程】深入解析Java并发工具类与应用实践
145 1
|
消息中间件 中间件 测试技术
【中间件1】在Windows下搭建RocketMQ
目录 目录 一 准备工作 1 RocketMQ部署架构1 2 环境配置 二 安装RocketMQ 1 下载编译好的RocketMQ 2 解压缩并进入bin目录 3 启动name server 4 启动broker 5 MQ安装完毕 三 验证MQ是否安...
2632 93
|
机器学习/深度学习 存储 人工智能
20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用(上)
20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用(上)
Vue3配置开发环境和生产环境
Vue3配置开发环境和生产环境
1063 0
|
消息中间件 存储 API
RocketMQ实战(3)-消息的有序性
RocketMQ实战(3)-消息的有序性
282 0
RocketMQ实战(3)-消息的有序性
|
弹性计算 安全 Linux
esc使用体验心得
在我看来云服务器有以下优点:省力,不需要专门花时间去维护服务器的硬件,看服务器是否运行正常;稳定,这应该是最主要的有点;安全,做web开发最怕的当然是攻击,所以选择大厂的服务器,自然是最香的;省钱,这当然也是很重要的,尤其对于我们学生用户还是很友好的,爆赞!