美文网首页设计模式程序员技术干货
设计模式实战 - 命令模式

设计模式实战 - 命令模式

作者: 紫霞等了至尊宝五百年 | 来源:发表于2018-11-27 20:21 被阅读45次

    定义与类型

    适用场景

    优点

    缺点

    相关模式

    备忘录模式
    经常结合使用

    coding







    典型应用是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上再绘制一遍.

    相关文章

      网友评论

        本文标题:设计模式实战 - 命令模式

        本文链接:https://www.haomeiwen.com/subject/lrvnqqtx.html