`
joknm
  • 浏览: 62843 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

命令模式,解释命令

    博客分类:
  • JAVA
阅读更多
用命令模式解释命令


原由:
    近日要做个实现,对不同的信息内容前缀采用不同的处理方式。主要类似命令模式。例如信息内容是:Test1111,要得到的算方式是打印出:1111

由于信息内容前缀已经定,不过却有三四十个之多。
于是想起用命令模式来解决。
以下是小弟的实现,如各位有好的建议,欢迎拍砖。

Control.java
组装类:
package command.control;

import java.lang.reflect.InvocationTargetException;

import command.Command;

public class Control
{
	private Command command;

	public Control(Command command)
	{
		this.command = command;
	}

	public void execute(String message)
	{
		try
		{
			command.execute(message);
		} catch (IllegalArgumentException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


Command.java
命令接口类:
package command;

import java.lang.reflect.InvocationTargetException;

public interface Command
{
	// 命令解释
	public void execute(String message) throws IllegalArgumentException,
			IllegalAccessException, InvocationTargetException;

	// 命令出错时返回帮助
	public String getHelp();

	// 添加下一个命令执行器
	public void addCommand(Command command);
}


Actuator.java
命令执行器:
package command.actuator;

import command.Command;

public class Actuator
{
	public void executeAAA(String message, Command command)
	{
		System.out.println("命令内容为:" + message + ",解释命令器为:" + command.getClass()
				+ ",命令帮助:" + command.getHelp());
	}

	public void executeBBBB(String message, Command command)
	{
		System.out.println("命令内容为:" + message + ",解释命令器为:" + command.getClass()
				+ ",命令帮助:" + command.getHelp());
	}

	public void executeTest(String message, Command command)
	{
		System.out.println("命令内容为:" + message + ",解释命令器为:" + command.getClass()
				+ ",命令帮助:" + command.getHelp());
	}

	public void executeComeon(String message, Command command)
	{
		System.out.println("命令内容为:" + message + ",解释命令器为:" + command.getClass()
				+ ",命令帮助:" + command.getHelp());
	}
}


CommandImpl.java
命令实现类:
package command.impl;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import command.Command;
import command.actuator.Actuator;

public class CommandImpl implements Command
{
	protected String command = ""; // 此命令执行器所要执行的命令的 总写
	protected String commandString = ""; // 此命令执行器所要执行的命令 ,多个时以逗号分开
	private Command nextCommand;// 下一个命令执行器
	private String methodPre = "execute";// 执行器方法前缀
	private Actuator actuator;// 执行器

	public CommandImpl(Actuator actuator)
	{
		this.actuator = actuator;
	}

	@Override
	public void execute(String message) throws IllegalArgumentException,
			IllegalAccessException, InvocationTargetException
	{
		if (!"".equals(commandString) && message != null && !"".equals(message))
		{
			String[] arrCom = null;
			if (commandString.indexOf(",") != -1)
			{
				arrCom = commandString.split(",");
			} else
			{
				arrCom = new String[]
				{ commandString };
			}
			for (String strCom : arrCom)
			{
				if (message.length() >= strCom.length()
						&& strCom.equalsIgnoreCase(message.substring(0, strCom
								.length())))
				{
					Method[] methods = actuator.getClass().getMethods();
					for (Method method : methods)
					{
						if ((methodPre + command).equalsIgnoreCase(method
								.getName()))
						{
							method.invoke(actuator, message, this);
							return;
						}
					}
				}
			}
			// 命令未被执行,调用下一个执行器
			if (nextCommand != null)
				nextCommand.execute(message);
		}
	}

	@Override
	public String getHelp()
	{
		return null;
	}

	@Override
	public void addCommand(Command command)
	{
		this.nextCommand = command;
	}

}


CommandAAA.java
AAA命令解释器:
package command.impl;

import command.actuator.Actuator;

public class CommandAAA extends CommandImpl
{
	protected String command = "AAA"; // 此命令执行器所要执行的命令的 总写
	protected String commandString = "aaa,AAA,12,ttb"; // 此命令执行器所要执行的命令,多个时以逗号分开

	public CommandAAA(Actuator actuator)
	{
		super(actuator);
		super.command = this.command;
		super.commandString = this.commandString;
	}

	@Override
	public String getHelp()
	{
		return "命令格式为:"+command;
	}

}


CommandBBBB.java
BBBB命令执行器:
package command.impl;

import command.actuator.Actuator;

public class CommandBBBB extends CommandImpl
{
	protected String command = "BBBB"; // 此命令执行器所要执行的命令的 总写
	protected String commandString = "BBBB,11"; // 此命令执行器所要执行的命令 ,多个时以逗号分开

	public CommandBBBB(Actuator actuator)
	{
		super(actuator);
		super.command = this.command;
		super.commandString = this.commandString;
	}

	@Override
	public String getHelp()
	{
		return "命令格式为:" + command;
	}
}


CommandComeon.java
Comeon命令执行器:
package command.impl;

import command.actuator.Actuator;

public class CommandComeon extends CommandImpl
{
	protected String command = "ComeOn"; // 此命令执行器所要执行的命令的 总写
	protected String commandString = "comeon,ComeOn,goon"; // 此命令执行器所要执行的命令

	// ,多个时以逗号分开

	public CommandComeon(Actuator actuator)
	{
		super(actuator);
		super.command = this.command;
		super.commandString = this.commandString;
	}

	@Override
	public String getHelp()
	{
		return "命令格式为:" + command;
	}

}


CommandTest.java
Test命令执行器:
package command.impl;

import command.actuator.Actuator;

public class CommandTest extends CommandImpl
{
	protected String command = "Test"; // 此命令执行器所要执行的命令的 总写
	protected String commandString = "Test,12"; // 此命令执行器所要执行的命令

	// ,多个时以逗号分开

	public CommandTest(Actuator actuator)
	{
		super(actuator);
		super.command = this.command;
		super.commandString = this.commandString;
	}

	@Override
	public String getHelp()
	{
		return "命令格式为:" + command;
	}
}


测试类:
package command;

import command.actuator.Actuator;
import command.control.Control;
import command.impl.CommandAAA;
import command.impl.CommandBBBB;
import command.impl.CommandComeon;
import command.impl.CommandTest;

public class Test
{

/**
* @param args
*/
public static void main(String[] args)
{
Actuator actuator = new Actuator();
Command comeon = new CommandComeon(actuator);
Command bbbb = new CommandBBBB(actuator);
Command test = new CommandTest(actuator);
Command aaa = new CommandAAA(actuator);
comeon.addCommand(bbbb);
bbbb.addCommand(test);
test.addCommand(aaa);//可以随意去除命令
Control control = new Control(comeon);
control.execute("AAACCAFE");
}

}
  • src.rar (1.7 KB)
  • 下载次数: 30
分享到:
评论
3 楼 lilang0603 2010-09-09  
   xml就是好
2 楼 joknm 2009-12-30  
zhangshoukai 写道
为啥不搞个xml文件配置一下。

果然搞了xml配置好多了,多谢指点。
1 楼 zhangshoukai 2009-12-27  
为啥不搞个xml文件配置一下。

相关推荐

    设计模式-命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用...通过阅读提供的博客链接(http://blog.sina.com.cn/s/blog_161d504630102wxis.html),你可以找到更多关于命令模式在iOS中的应用实例和详细解释。

    设计模式之命令模式

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于解耦发出命令的对象和执行命令的...

    设计模式之命令模式(Command)

    命令模式是一种行为设计模式,它的主要目的是将请求者与接收者解耦,使得请求的发起者无需知道哪个对象会执行这个请求,同时也让系统更容易扩展。这种模式在软件工程中广泛应用,特别是在事件驱动和分布式系统中。 ...

    命令模式.zip

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C#编程中,命令模式常用于实现解耦发送者和接收者,提高代码的...

    设计模式之命令模式源码示例

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式广泛应用在各种场景中,以提高代码的灵活...

    Qt-命令模式

    【Qt-命令模式】 在软件设计模式中,命令模式是一种行为设计模式,它将请求封装为一个对象,从而使用户能够参数化不同的请求,支持可撤销的操作,并可以将请求队列化。Qt是一个跨平台的C++图形用户界面应用程序开发...

    C#命令模式模型

    命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以参数化不同的请求,对请求排队或记录请求日志,以及支持可撤销的操作。C#作为.NET框架的主要编程语言,非常适合应用这种模式。本篇文章将深入探讨...

    设计模式C++学习之命令模式(Command)

    命令模式是一种行为设计模式,它将请求封装为一个对象,使得可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中,命令模式的应用可以帮助我们更好地组织代码,提高代码的可扩展性和可维护性。...

    记事本 使用了策略模式和命令模式

    在“记事本 使用了策略模式和命令模式”这个主题中,我们将深入探讨这两种设计模式以及它们如何应用于记事本软件的实现。 首先,让我们了解策略模式。策略模式是一种行为设计模式,它允许在运行时选择算法或策略。...

    C#命令模式应用

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C#编程中,命令模式常用于实现解耦,使得调用者与执行者之间...

    设计模式之命令模式详解(内附有例子,无源码)

    文档“设计模式18:Command(命令模式).docx”可能详细解释了该模式的原理和应用实例,而“命令模式.doc”可能是另一个角度的解释或补充说明。 通过深入理解并应用命令模式,开发者能够更好地设计系统,使其更加灵活...

    命令模式代码示例

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本示例中,我们将深入探讨命令模式的核心概念和实现方式。 ...

    命令模式代码demo

    命令模式是一种设计模式,它将请求封装为一个对象,从而使我们能使用不同的请求、队列或者日志请求,以及支持可撤销的操作。在本代码demo中,我们将深入探讨这一模式的实现及其应用。 命令模式的核心思想是解耦调用...

    命令模式(多命令) - 代码(Java)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中实现命令模式,我们可以创建一个接口或者抽象类作为命令...

    java 命令模式实例 (设计模式)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中,命令模式的应用非常广泛,尤其在需要解耦调用者和接收...

    命令模式实现简单计算器功能包括撤销

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求以便支持可撤消的操作。在这个简单的计算器例子中,我们将探讨如何使用命令模式来实现加法、...

    单例模式_命令模式

    单例模式和命令模式是两种常见的设计模式,在软件开发中有着广泛的应用。它们分别解决了不同的问题,但在实际项目中,可以巧妙地结合使用,以提高代码的灵活性和可维护性。 单例模式是一种确保一个类只有一个实例,...

    命令模式 C++ 实现

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C++中,我们可以利用面向对象的特性来有效地实现这个模式。 ...

    设计模式之命令模式案例代码

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本文中,我们将深入探讨命令模式的原理、结构和实际应用,并...

Global site tag (gtag.js) - Google Analytics