java_command_宏命令
来源:互联网 发布:数据合并 编辑:程序博客网 时间:2024/06/08 12:11
introduction:
这样做的目的可以减少“硬编码”,动态决定命令组合,在使用上更灵活,一般来说,宏命令的做法更优雅,也需要较少的新代码。
demo:
description:模拟开舞会的场景,此时会需要灯光和音乐
Light.java
public class Light { private String name; public Light(String name){ this.name = name; } public void on(){ System.out.println(name+" on"); } public void off(){ System.out.println(name+" off"); } }
Player.java
public class Player { private String name; public Player(String name){ this.name = name; } public void off(){ System.out.println(name+" off"); } public void on(){ System.out.println(name+" on"); } public void volumn(int num){ System.out.println(name+" : "+num); } public void cd(){ System.out.println(name+" cd"); } public void dvd(){ System.out.println(name+" dvd"); }}
public interface Command { void execute(); void undo(); }
LightOffCommand.java
public interface Command { void execute(); void undo(); }
LightOnCommand.java
public class LightOnCommand implements Command{ private Light light; public LightOnCommand(Light light){ this.light = light; } @Override public void execute() { light.on(); } @Override public void undo() { light.off(); }}
NoCommand.java
public class NoCommand implements Command{ @Override public void execute() { // TODO Auto-generated method stub } @Override public void undo() { // TODO Auto-generated method stub } }
PlayeroffCommand.java
public class PlayerOffCommand implements Command{ private Player player; public PlayerOffCommand(Player player){ this.player = player; } @Override public void execute() { player.off(); } @Override public void undo() { player.on(); player.cd(); player.volumn(11); } }
PlayerOnCommand.java
public class PlayerOnCommand implements Command{ private Player player; public PlayerOnCommand(Player player){ this.player = player; } @Override public void execute() { player.on(); player.cd(); player.volumn(11); } @Override public void undo() { player.off(); } }
MacroOffCommand.java
public class MacroOffCommand implements Command{ private Command[] commands; public MacroOffCommand(Command[] commands){ this.commands = commands; } @Override public void execute() { for(int i=0;i<commands.length;i++){ commands[i].execute(); } } @Override public void undo() { for(int i=0;i<commands.length;i++){ commands[i].undo(); } }}
MacroOnCommand.java
public class MacroOnCommand implements Command{ private Command[] commands; public MacroOnCommand(Command[] commands){ this.commands = commands; } @Override public void execute() { for(int i=0;i<commands.length;i++){ commands[i].execute(); } } @Override public void undo() { for(int i=0;i<commands.length;i++){ commands[i].undo(); } }}
RemoteControl.java
public class RemoteControl { private Command[] onCommands; private Command[] offCommands; private Command undoCommand; public RemoteControl(){ Command noCommand = new NoCommand(); onCommands = new Command[1]; offCommands = new Command[1]; this.undoCommand = noCommand; for(int i=0;i<onCommands.length;i++){ this.onCommands[i] = noCommand; this.offCommands[i] = noCommand; } } public void setCommand(int index, Command onCommand, Command offCommand){ onCommands[index] = onCommand; offCommands[index] = offCommand; } public void onButtonPressed(int index){ onCommands[index].execute(); undoCommand = offCommands[index]; } public void offButtonPressed(int index){ offCommands[index].execute(); undoCommand = onCommands[index]; } public void undoButtonPressed(){ undoCommand.execute(); } public String toString(){ StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("--- command begin --- \n"); for(int i=0;i<onCommands.length;i++){ stringBuffer.append("["+i+"]"+onCommands[i].getClass().getSimpleName()+" , "+ offCommands[i].getClass().getSimpleName()+"\n"); } return stringBuffer.toString(); }}
ControllerLoader.java
public class ControllerLoader { public static void main(String[] args) { Light light = new Light("party light"); Player player = new Player("party player"); Command partyLightOn = new LightOnCommand(light); Command partyLightOff = new LightOffCommand(light); Command partyPlayerOn = new PlayerOnCommand(player); Command partyPlayerOff = new PlayerOffCommand(player); Command[] onCommands = {partyLightOn,partyPlayerOn}; Command[] offCommands = {partyLightOff,partyPlayerOff}; Command macroOn = new MacroOnCommand(onCommands); Command macroOff = new MacroOffCommand(offCommands); RemoteControl remoteControl = new RemoteControl(); remoteControl.setCommand(0, macroOn, macroOff); System.out.println(remoteControl); remoteControl.onButtonPressed(0); remoteControl.offButtonPressed(0); remoteControl.undoButtonPressed(); }}
运行结果:
--- command begin ---
[0]MacroOnCommand , MacroOffCommand
party light on
party player on
party player cd
party player : 11
party light off
party player off
party light on
party player on
party player cd
party player : 11
- java_command_宏命令
- 命令模式-宏命令+状态撤销
- UltraEdit的宏命令
- 宏命令函数库
- LR 宏命令
- excel 宏命令
- /def 宏定义命令
- 宏展开命令
- cocos2dx常用宏命令
- 常用宏命令
- Cisco IOS 宏命令
- php 宏命令模式
- Cisco IOS 宏命令
- office基本宏命令
- 宏#define命令练习
- 命令
- 命令
- 命令
- ld: library not found for -lz
- Google Maps导出的kml与kmz纠偏
- Android 实用工具之emulator
- PyQt4 关联不同的滚动条
- location of the android sdk has not been setup in the preferences如何解决
- java_command_宏命令
- [Leetcode] Merge two sorted lists
- Android之UI学习篇四:EditText输入表情和特殊字符
- 路遇大话设计模式
- POJ-1475Pushing Boxes(貌似测试数据有问题)
- 某kml纠偏软件数据破解
- 关于字符数组和字符串比较 C++
- 初学设计模式(3)-----单例模式(在研究单例的线程安全问题时,发现一篇很全面的文章,直接转了)
- Android之UI学习篇五:AutoCompleteTextView自动完成输入内容