命令模式遵循封装变化、针对接口及开闭原则。
命令模式通过提供统一接口,是不同对象的方法调用拥有一致的外观,从而实现执行者的可扩充性。
命令模式主要处理统一访问不同类型对象的需求。
命令模式最主要的缺点是需要额外提供命令类,有时命令类数量也会很庞大。
命令模式简单示例
package commandpattern; public interface Command { /** * 执行功能方法 * * @return 执行成功返回true,否则返回false */ boolean execute(); /** * 获取命令名称 * * @return */ String getCommandName(); }
package commandpattern.commands; import commandpattern.Command; import commandpattern.functionality.Init; public class InitCommand implements Command{ private String commandName = "初始化命令"; @Override public boolean execute() { Init init = new Init(); if(init.load()&&init.config()&&init.init()) { return true; } return false; } @Override public String getCommandName() { return commandName; } }
package commandpattern.commands; import commandpattern.Command; import commandpattern.functionality.Init; public class ReinitCommand implements Command{ private String commondName = "重新初始化信息"; @Override public boolean execute() { Init init = new Init(); if(init.config()&&init.reinit()) { return true; } return false; } @Override public String getCommandName() { return commondName; } }
package commandpattern.functionality; /** * 初始化方法 * 首次初始化需要加载数据,读取配置文件 * 从新加载时只需要读取配置文件 */ public class Init { public boolean load() { System.out.println("--加载数据"); return true; } public boolean config() { System.out.println("--读取配置文件"); return true; } public boolean init() { System.out.println("--初始化角色信息"); return true; } public boolean reinit() { System.out.println("--重新初始化角色信息"); return true; } }
package commandpattern; import java.util.ArrayList; import java.util.List; /** * 执行器 */ public class Executor { //执行命令列表 private List<Command> commonds = new ArrayList<Command>(); //添加命令 public void addCommond(Command commond) { commonds.add(commond); } /** * 执行命令 */ public void executeCommands() { for (Command commond : commonds) { if(commond.execute()) { System.out.println(commond.getCommandName()+"执行成功"); } else { System.out.println(commond.getCommandName()+"执行失败"); } } } }
package commandpattern; import commandpattern.commands.InitCommand; import commandpattern.commands.ReinitCommand; public class Test { public static void main(String[] args) { Executor exe = new Executor(); exe.addCommond(new InitCommand()); exe.addCommond(new ReinitCommand()); exe.executeCommands(); } }测试结果
--加载数据 --读取配置文件 --初始化角色信息 初始化命令执行成功 --读取配置文件 --重新初始化角色信息 重新初始化信息执行成功
原文地址:http://blog.csdn.net/sunshoupo211/article/details/41010673