命令模式

典型应用是GUI中的绘图程序, 用命令模式实现“撤销”操作.

  • 命令接收者:执行实际任务。
  • 命令者:封装所有命令者的信息。
  • 发起者:空着一个或者多个命令的顺序和执行。
  • 客户端:创建具体的命令实例
public class DrawInvoker {

    //绘制列表
    private List<DrawPath> drawList = Collections.synchronizedList(new ArrayList<DrawPath>());

    //重做列表
    private List<DrawPath> redoList = Collections.synchronizedList(new ArrayList<DrawPath>());

    //添加一条命令
    public void add(DrawPath command) {
        redoList.clear();
        drawList.add(command);
    }

    //撤销操作
    public void undo() {
        if(drawList.size() >0 ) {
            DrawPath undo = drawList.get(drawList.size() - 1);
            drawList.remove(drawList.size() - 1); // 把drawList中的最后一条命令删除掉.
            undo.undo();
            redoList.add(undo);
        }
    }
}

“撤销”上一步操作的实现原理是, 首先记录每一条绘制命令到drawList中, “撤销”操作就是把最后一条命令从drawList中删除, 然后把canvas清空, 把drawList中的命令在清空的canvas上再绘制一遍.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spring相关

webpack处理ttf字体文件报错的方法

我们在使用webpack打包的时候经常因为引入ttf字体报错而烦恼,这里解决ttf字体报错的方法需要加入一个url-loader,没有的话需要npm先安装下:

1632
来自专栏前端大白专栏

angular2中在使用路由懒加载时候出现的错误

1704
来自专栏杨逸轩 ' sBlog

如何将Pjax整合进网站,实现全站无刷新加载?

1K9
来自专栏向治洪

关于React Native 报Export declarations are not supported by current JavaScript version错误的解决问题

设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: ? 当然我们点击转换...

2596
来自专栏BY的专栏

使用 .gitignore 忽略 git 仓库中的文件

2935
来自专栏Jerry的SAP技术分享

关于SAP UI5数据绑定我的一些原创内容

第6篇文章:https://blogs.sap.com/2015/10/25/how-i-do-self-study-on-a-given-fiori-cont...

1725
来自专栏java相关

dotfiles项目

842
来自专栏Ryan Miao

Hello ReactJS

前言 React学习前先搭好环境,官网的例子看着比较分散。结合webpack就可以体验完整的es6开发流程了。 源码:https://github.com/R...

2577
来自专栏james大数据架构

Android系统目录介绍

src目录:完成对java代码的编写 assets目录: 资源目录 res目录: 图片,布局文件和字符串,菜单等文件 bin目录:输出文件夹 如生成的apk安装...

21810
来自专栏守望轩

Visual Studio 2008 每日提示(二十六)

#251、在文件中保存扩展名的映射 原文链接:You can save your file extension mappings to a file 操作步骤...

3674

扫码关注云+社区

领取腾讯云代金券