首页 > 其他分享 >11.18日报

11.18日报

时间:2024-11-27 10:57:17浏览次数:8  
标签:11.18 日报 calculator undo public State command void

今天完成了设计模式实验十六,以下为今日实验内容:

实验16:命令模式

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

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

2、能够利用命令模式解决实际问题。

 
   

 

 

[实验任务一]:多次撤销和重复的命令模式

某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。

实验要求:

1.     提交类图;

 

2. 提交源代码;

import java.util.Stack;

// Receiver
class Calculator {
    private int state;

    public int getState() {
        return state;
    }

    public void add(int value) {
        state += value;
    }

    public void undo() {
        state = 0; // 重置状态,简化实现
   
}
}

// Command interface
interface Command {
    void execute();
    void undo();
}

// ConcreteCommand
abstract class ConcreteCommand implements Command {
    protected Calculator calculator;

    public ConcreteCommand(Calculator calculator) {
        this.calculator = calculator;
    }
}

class AddCommand extends ConcreteCommand {
    private int value;

    public AddCommand(Calculator calculator, int value) {
        super(calculator);
        this.value = value;
    }

    @Override
    public void execute() {
        calculator.add(value);
    }

    @Override
    public void undo() {
        calculator.undo(); // 简化实现,实际可能需要记录每一步的具体值
   
}
}

// Invoker
class CommandManager {
    private Stack<Command> commandHistory = new Stack<>();
    private Stack<Command> undoHistory = new Stack<>();

    public void storeAndExecute(Command command) {
        command.execute();
        commandHistory.push(command);
        undoHistory.clear(); // 每次执行新命令时,清空重做栈
   
}

    public void undo() {
        if (!commandHistory.isEmpty()) {
            Command command = commandHistory.pop();
            command.undo();
            undoHistory.push(command);
        }
    }

    public void redo() {
        if (!undoHistory.isEmpty()) {
            Command command = undoHistory.pop();
            command.execute();
            commandHistory.push(command);
        }
    }
}

// Client
public class CommandPatternExample {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        CommandManager commandManager = new CommandManager();

        Command add5 = new AddCommand(calculator, 5);
        Command add3 = new AddCommand(calculator, 3);

        commandManager.storeAndExecute(add5);
        System.out.println("State: " + calculator.getState()); // State: 5

       
commandManager.storeAndExecute(add3);
        System.out.println("State: " + calculator.getState()); // State: 8

       
commandManager.undo();
        System.out.println("State: " + calculator.getState()); // State: 5

       
commandManager.undo();
        System.out.println("State: " + calculator.getState()); // State: 0

       
commandManager.redo();
        System.out.println("State: " + calculator.getState()); // State: 5
   
}
}

 

3. 注意编程规范。

 

标签:11.18,日报,calculator,undo,public,State,command,void
From: https://www.cnblogs.com/lijianlongCode13/p/18571854

相关文章

  • 11.20日报
    今天完成设计模式实验十七,以下为今日实验内容:实验17:解释器模式(选作)本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解解释器模式的动机,掌握该模式的结构;2、能够利用解释器模式解决实际问题。     [实验任务一]:解释器模式某机器人控制程序包含......
  • 11.4日报
    今天完成了设计模式的实验十一,以下为实验内容:实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。[实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(Sim......
  • 11.6日报
    完成了设计模式实验十二,以下为实验内容:实验12:外观模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解外观模式的动机,掌握该模式的结构;2、能够利用外观模式解决实际问题。[实验任务一]:计算机开启在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调......
  • 11.7日报
    完成设计模式实验十三,以下为实验内容:实验13:享元模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解享元模式的动机,掌握该模式的结构;2、能够利用享元模式解决实际问题。     [实验任务一]:围棋设计一个围棋软件,在系统中只存在一个白棋对象......
  • 11.8日报
    背了些单词,之后进行了人机交互的实验,完成了添加人员模块:以下为今日完成部分代码:namespacetest1{partialclassaddmanForm{///<summary>///Requireddesignervariable.///</summary>privateSystem.ComponentModel.IConta......
  • 11.11日报
    今天完成了设计模式的实验十四,以下为实验内容:实验14:代理模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解代理模式的动机,掌握该模式的结构;2、能够利用代理模式解决实际问题。     [实验任务一]:婚介所婚介所其实就是找对象的一个代理,请仿......
  • 10.25日报
    今天完成了人机交互实验的部分内容,以下为部分代码:namespacetest1{partialclassForm1{///<summary>///必需的设计器变量。///</summary>privateSystem.ComponentModel.IContainercomponents=null;///<summary>......
  • 10.28日报
    今天完成了设计模式的实验,以下为今天的实验内容:实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。     [实验任务一]:双向适配器实现一个双向适配器,使得......
  • 10.29日报
    今天继续进行mes系统开发,准备进行一阶段验收,主要做一个车间内班组之间的流程,以下为我们小组探讨出的主要流程:接收任务:系统接收生产部下达的生产任务。生成产品批次二维码。领取任务:班长扫描二维码领取生产任务。根据每个人的生产效率进行派单。工人领取任务:工人扫描自己的二维......
  • 10.30日报
    今天完成设计模式的实验,以下为实验内容:实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。     [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个......