行为型模式又可以分成以下四类:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类
命令模式属于第二类,两个类之间的关系
是这样的,命令发出者持有命令,命令持有执行者,这样命令发出者发出命令,执行者执行命令,命令发出者和执行者被解耦
package behavior.pattern.betweenclass.command; public class Invoker { private Command command; public void SetCommand(Command command) { this.command = command; } public void ExecuteCommand() { command.execute(); } } package behavior.pattern.betweenclass.command; public abstract class Command { protected Account account; public Command(Account account) { this.account = account; } public abstract void execute(); } package behavior.pattern.betweenclass.command; public class MoneyInCommand extends Command { private float amount; public MoneyInCommand(Account account, float amount) { super(account); this.amount = amount; } /// <summary> /// 实现存钱命令 /// </summary> @Override public void execute() { account.moneyIn(amount); } } package behavior.pattern.betweenclass.command; public class MoneyOutCommand extends Command { private float amount; public MoneyOutCommand(Account account, float amount) { super(account); this.amount = amount; } /// <summary> /// 实现取钱命令 /// </summary> @Override public void execute() { account.moneyOut(amount); } } package behavior.pattern.betweenclass.command; /// <summary> /// 银行帐号 /// </summary> public class Account { /// <summary> /// 帐号总金额 /// </summary> private float totalAmount; /// <summary> /// 存钱 /// </summary> /// <param name="amount"></param> public void moneyIn(float amount) { this.totalAmount += amount; } /// <summary> /// 取钱 /// </summary> /// <param name="amount"></param> public void moneyOut(float amount) { this.totalAmount -= amount; } public float getTotalAmount() { return totalAmount; } public void setTotalAmount(float totalAmount) { this.totalAmount = totalAmount; } }测试代码
package behavior.pattern.betweenclass.command; public class Client { /** * 对一个账户进行操作,命令处理的对象是账户,调用者调用命令,命令操作账户完成账户金额的增减 */ public static void main(String[] args) { // 创建银行帐号 Account account = new Account(); // 创建一个存入500元的命令 Command commandIn = new MoneyInCommand(account,500); // 创建一个调度者 Invoker invoker = new Invoker(); // 设置存钱命令 invoker.SetCommand(commandIn); // 执行 invoker.ExecuteCommand(); System.out.println("The current amount is " + account.getTotalAmount()); // 再次存入500 Command commandIn2 = new MoneyInCommand(account, 500); invoker.SetCommand(commandIn2); invoker.ExecuteCommand(); System.out.println("The current amount is " + account.getTotalAmount()); // 取出300 Command commandOut = new MoneyOutCommand(account, 300); invoker.SetCommand(commandOut); invoker.ExecuteCommand(); System.out.println("The current amount is " + account.getTotalAmount()); } }运行结果
转载于:https://www.cnblogs.com/liunianfeiyu/p/10133867.html