• Head First 设计模式中的命令模式 的一个错误


    最近在看Head First 设计模式,其中命令模式中有讲到实现撤销功能,并且作者还出了一道题,

    下面的是书中习题:

    public class MarcoCommand implements Command
    
    {
    
    	Command[] commands;
    
    	public MarcoCommand(Command[] commands)
    
    	{
    
    		this.commands = commands;
    
    	}
    
    	public void execute()
    
    	{
    
    		for (int i = 0; i < commands.Length; i++)
    
    		{
    
    			commands[i].execute();
    
    		}
    
    	}
    
    	public void undo()
    
    	{ 
    
    		//请实现撤销功能。
    
    	}
    
    }

    在看到这里的时候,其实脑子里已经完成了答案了,可是最后看到书后面的答案的时候,却感觉有点奇怪,仔细想想还有点意思.

    书中的答案如下:

    public class MarcoCommand implements Command
    
    {
    
    	Command[] commands;
    
    	public MarcoCommand(Command[] commands)
    
    	{
    
    		this.commands = commands;
    
    	}
    
    	public void execute()
    
    	{
    
    		for (int i = 0; i < commands.Length; i++)
    
    		{
    
    			commands[i].execute();
    
    		}
    
    	}
    
    	public void undo()
    
    	{ 
    
    		for (int i = 0; i < commands.Length; i++)
    
    		{
    
    			commands[i].undo();
    
    		}
    
    	}
    
    }

    你看出这段代码的问题了吗?

    作者:LoveJenny
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    函数方法与面向对象
    seleniums私房菜系列一 ---- selenium简介
    MySQL图形化管理工具
    存储引擎
    mysql自定义函数
    加密函数
    mysql聚合函数
    mysql信息函数
    mysql日期时间函数(常用的)
    mysql比较运算符和函数
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/2778037.html
Copyright © 2020-2023  润新知