zoukankan      html  css  js  c++  java
  • 命令模式(2)-命令接口中的撤销方法

    通过封装请求的execute()方法以及撤销请求的undo()方法:

    接受者:
    package DesignPatterns.CommandMode1;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    
    public class StringReceiver {
        public void printString(ArrayList<String> arrayList)
        {
            System.out.println("输出后");
            for (int i=0;i<arrayList.size();i++)
            {
                System.out.println(arrayList.get(i));
            }
        }
        public void cancelString(ArrayList<String> arrayList)
        {
            System.out.println("取消输出后");
            for (int i=0;i<arrayList.size();i++)
            {
                System.out.println(arrayList.get(i));
            }
    
        }
    }
    
    命令接口:
    
    package DesignPatterns.CommandMode1;
    
    import java.util.ArrayList;
    
    public interface StringCommand {
        void execute(String name);
        void undo(String name);
    }
    
    
    具体命令:
    
    package DesignPatterns.CommandMode1;
    
    import java.util.ArrayList;
    
    public class StringConcreteCommand  implements StringCommand{
        ArrayList<String> arrayList;
        StringReceiver stringReceiver;
        public StringConcreteCommand(StringReceiver stringReceiver)
        {
            this.arrayList=new ArrayList<>();
            this.stringReceiver=stringReceiver;
        }
        @Override
        public void execute(String name) {
            arrayList.add(name);
            stringReceiver.printString(arrayList);
        }
    
        @Override
        public void undo(String name) {
            arrayList.remove(name);
            stringReceiver.cancelString(arrayList);
    
        }
    }
    
    
    请求者:
    
    package DesignPatterns.CommandMode1;
    
    import DesignPatterns.CommandMode.Command;
    
    public class StringInvoker {
        StringCommand stringCommand;
        String name;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setStringCommand(StringCommand stringCommand)
        {
            this.stringCommand=stringCommand;
        }
        public void executeStringCommand()
        {
            stringCommand.execute(name);
        }
        public void undoStringCommand()
        {
            stringCommand.undo(name);
        }
    }
    
    
    测试类:
    
    package DesignPatterns.CommandMode1;
    
    public class Application {
        public static void main(String[] args) {
            StringReceiver stringReceiver=new StringReceiver();
            StringCommand stringCommand=new StringConcreteCommand(stringReceiver);
            StringInvoker stringInvoker=new StringInvoker();
            stringInvoker.setStringCommand(stringCommand);
            stringInvoker.setName("xujinfeng");
            stringInvoker.executeStringCommand();
            stringInvoker.undoStringCommand();
        }
    }

  • 相关阅读:
    Dynamic Method Binding in Delphi 动态方法绑定
    Server Memory Server Configuration Options 服务器内存服务配置选项
    最大化系统并发连接数.Windows.reg
    js一行代码解决各种IE兼容问题
    [原创]如果软件在网络磁盘中或移动磁盘中运行时需要解决 exception C0000006 异常问题
    用 ghostscript 转化PDF文件为图片 的参数设置
    GhostScript应用一例:使用GhostScript强行修改加密PDF
    Win7 Win8 Win10取不到机器码的处理办法
    WCAG
    页面被iframe与无刷新更换url方法
  • 原文地址:https://www.cnblogs.com/dloading/p/10753200.html
Copyright © 2011-2022 走看看