设计模式入门之命令模式Command

//命令模式定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化
//对请求排队或者记录请求日志,以及支持可撤销的操作
//模式结构
//命令接口
public interface Command {
	public void execute();
}
//具体的命令,需要封装与之对应的执行者Receiver
public class ConcreteCommand implements Command {
	private Receiver receiver = null;
	private Stirng state;
	public ConcreteCommand(Receiver receiver) {
		this.receiver = receiver;
	}
	public void execute() {
		receiver.action();
	}
}
//命令接受者即执行者
public class Receiver {
	public void action() {
		//真正执行命令操作的代码
	}
}
//调用者,需要封装他所具备的命令
public class Invoker {
	private Command command = null;
	public void setCommand(Command command) {
		this.command = command;
	}
	public void runCommand() {
		command.execute();
	}
}
//客户端
public class Client {
	public static void main(String args[]) {
		Receiver receiver = new Receiver();
		Command command = new Command(receiver);
		Invoker invoker = new Invoker();
		invoker.setCommand(command);
		invoker.runCommand();
	}
}
//实例:主机开机的例子
//定义主板
public interface MainBoardApi {
	public void open();
}
//某个主板类,相当与模式中的接受者,真正执行命令
public class GigaMainBoard implements MainBoardApi {
	public void open() {
		System.out.println("开机");
	}
}
//命令接口
public interface Command {
	public void execute();
}
//开机命令
public class OpenCommand implements Command {
	private MainBoardApi mainBoard = null;
	public OpenCommand(MainBoard mainBoard) {
		this.mainBoard = mainBoard;
	}
	public void execute() {
		this.mainBoard.open();
	}
}
//机箱,包括了命令对象
public class Box {
	private Command openCommand;
	public void setOpenCommand(Command command) {
		this.openCommand = command;
	}
	public void openButtonPressed() {
		openCommand.execute();
	}
}
//客户端,客户使用开机按钮
public class Client {
	public static void main(String args[]) {
		MainBoardApi mainBoard = new GigaMainBoard();
		Command openCommand = new OpenCommand(mainBoard);
		Box box = new Box();
		box.setCommand(openCommand);
		box.openButtonPressed();
	}
}
//命令模式优点
//更松散的耦合
//命令模式使得命令的发起者-客户端,与命令的执行者-接受者对象完全耦合
//发起者完全不知道执行者是谁,也不知道如何实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值