java设计模式之—追美眉的技术:命令模式(Command)

概述:模式比较简单,一个发起命令,一个执行命令。

核心思想:Command接口类定义一个execute()命令执行 和 unDo()命令回撤。

案例一:MM向boy发起一组命令,boy执行命令

设计思路:

1、定义一个Command抽象类,分别定义两个方法:execute()、unDo();

2、给Boy类分别定义执行命令的方法、回滚命令的方法:executeCommands()、unDoCommands();

3、定义一些具体命令类,并继承Command类诸如:ShoppingCommand、HugCommand类等。

4、MM类定义发起命令的方法,入参简单一点,传入一个Boy。

注:实际场景也可灵活传入命令,此案例简单的写。

代码实现:

//1.定义命令类的抽象类
public abstract class Command {
	public abstract void execute() ;//执行命令
	public abstract void unDo() ;   //回滚命令
}

//2.定义命令类的子类
public class HugCommand extends Command {
	@Override
	public void execute() {
		System.out.println("抱一抱");
	}

	@Override
	public void unDo() {
		System.out.println("放开双臂");
	}
}


//2.定义命令类的子类
public class ShoppingCommand extends Command{
	@Override
	public void execute() {
		System.out.println("一起逛街中");
	}

	@Override
	public void unDo() {
		System.out.println("退出逛街");
	}
}

//3.给男孩定义执行、撤销命令的方法
public class Boy {

	List<Command> commands=new ArrayList<Command>();//存放要执行的命令
	List<Command> unDocommands=new ArrayList<Command>();//存放需要撤销的命令
	
	public void addCommand(Command command) {
		this.commands.add(command);
	}

	public void executeCommands() {
		for (Command command : commands) {
			command.execute();
		}
	}
	
	public void unDoCommands() {
		for (Command command : unDocommands) {
			command.unDo();
		}
	}
}

//4.给MM定义,发起命令的方法
public class MM {
	
	//命令boy做事
	public static void order(Boy boy) {
		boy.addCommand(new HugCommand());//拥抱的命令
		boy.addCommand(new ShoppingCommand());//逛街的命令
		boy.executeCommands();
	}
	
	public static void main(String[] args) {
		order(new Boy());
	}
}

运行结果:

抱一抱
一起逛街中

总结:

1、以上案例主要讲述,命令模式的脉络,不涉及细节问题。

2、实际运用中,该模式考虑的要多一些,特别是命令的回滚这块,要记录哪些命令已经执行了,哪些命令还没有执行,如何回滚命令。

3、实际运用中,还要考虑:发起命令方,灵活的发起命令等一些列问题。

以上案例,只为讲述Command模式的设计思想,明白原理,灵活运用即可。设计模式的最高境界,自己不知道自己已经运用了设计模式。

欢迎吐槽指正,让我们一起变得强大!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值