doeliang-take2 / calculator-demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

要求

写一个计算器类(Calculator),可以实现两个数的加、减、乘、除运算,并可以进行undo和redo操作,这里设计为redo需要和undo搭配使用,即前面没有执行undo,直接redo不生效,所以计算过程中redo次数要小于等于undo次数。

设计思路

这个需求的难点是要对计算过程进行记录,以实现操作的撤销和重做,这里提供两种方案

  1. 将所有操作写入一个Calculator类中,包含cal,undo,redo等方法,使用ArrayList记录历史输入和结果,用算法思路实现。
  2. 选择命令模式的设计思路,将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令,将行为的请求与执行解耦,整个流程需要定义四个角色:
  • Command: 是一个接口,定义执行,撤销命令

  • ConcreteCommand: 具体的执行命令,他们需要实现Command接口, 这里是CalculatorCommand类

  • Receiver: 真正执行命令的角色,这里是Calculator类

  • Invoker: 负责按照客户端的指令设置并执行命令,这里是实际调用计算器方法的部分。

About


Languages

Language:Java 100.0%