Command

1).下面以Boss和Clerk为例:

Clerk.java代码如下:

 

package com.flyingh.receiver;

public class Clerk {
	public void action() {
		System.out.println("**************");
	}
}

 

 Command.java代码如下:

 

package com.flyingh.icommand;

public interface Command {
	void execute();
}

 

 ConcreteCommand.java代码如下:

 

package com.flyingh.command;

import com.flyingh.icommand.Command;
import com.flyingh.receiver.Clerk;

public class ConcreteCommand implements Command {
	private Clerk clerk;

	public ConcreteCommand(Clerk clerk) {
		super();
		this.clerk = clerk;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method s
		clerk.action();
	}

}

 

 Boss.java代码如下:

 

package com.flyingh.invoker;

import com.flyingh.icommand.Command;

public class Boss {
	private Command command;

	public Command getCommand() {
		return command;
	}

	public void setCommand(Command command) {
		this.command = command;
	}

	public void action() {
		command.execute();
	}
}

 

Client.java代码如下:

package com.flyingh.client;

import com.flyingh.command.ConcreteCommand;
import com.flyingh.icommand.Command;
import com.flyingh.invoker.Boss;
import com.flyingh.receiver.Clerk;

public class Client {
	public static void main(String[] args) {
		Boss boss = new Boss();
		Clerk clerk = new Clerk();
		Command command = new ConcreteCommand(clerk);
		boss.setCommand(command);
		boss.action();
	}
} 

程序运行结果如下:

 

**************

 2).下面以Invoker点击三个按钮(on,off,undo)来控制Light的on,off和undo为例,代码如下:

Command.java

 

package com.flyingh.icommand;

public interface Command {
	void execute();

	void undo();
}

 Light.java

 

package com.flyingh.receiver;

public class Light {

	public void on() {
		// TODO Auto-generated method stub
		System.out.println("turn on the light!");
	}

	public void off() {
		// TODO Auto-generated method stub
		System.out.println("turn off the light!");
	}

}

 LightOnCommand.java

 

package com.flyingh.command;

import com.flyingh.icommand.Command;
import com.flyingh.receiver.Light;

public class LightOnCommand implements Command {
	private Light light;

	public LightOnCommand(Light light) {
		super();
		this.light = light;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.on();
	}

	@Override
	public void undo() {
		// TODO Auto-generated method stub
		light.off();
	}

}

 LightOffCommand.java

 

package com.flyingh.command;

import com.flyingh.icommand.Command;
import com.flyingh.receiver.Light;

public class LightOffCommand implements Command {
	private Light light;

	public LightOffCommand(Light light) {
		super();
		this.light = light;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.off();
	}

	@Override
	public void undo() {
		// TODO Auto-generated method stub
		light.on();
	}

}

Invoker.java

package com.flyingh.invoker;

import com.flyingh.icommand.Command;

public class Invoker {
	private Command lightOnCommand;
	private Command lightOffCommand;
	private Command undoCommand;

	public Invoker() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Invoker(Command lightOnCommand, Command lightOffCommand) {
		super();
		this.lightOnCommand = lightOnCommand;
		this.lightOffCommand = lightOffCommand;
	}

	public void OnButtonClick() {
		lightOnCommand.execute();
		undoCommand = lightOnCommand;
	}

	public void OffButtonClick() {
		lightOffCommand.execute();
		undoCommand = lightOffCommand;
	}

	public void undoButtonClick() {
		undoCommand.undo();
	}
} 

Client.java

package com.flyingh.client;

import com.flyingh.command.LightOffCommand;
import com.flyingh.command.LightOnCommand;
import com.flyingh.invoker.Invoker;
import com.flyingh.receiver.Light;

public class Client {
	public static void main(String[] args) {
		Light light = new Light();
		LightOnCommand lightOnCommand = new LightOnCommand(light);
		LightOffCommand lightOffCommand = new LightOffCommand(light);
		Invoker invoker = new Invoker(lightOnCommand, lightOffCommand);
		invoker.OnButtonClick();
		invoker.OffButtonClick();
		invoker.undoButtonClick();
	}
} 

程序运行结果如下:

 

turn on the light!
turn off the light!
turn on the light!

3).一次打开或者关闭多个(宏命令):

Command.java

 

package com.flyingh.icommand;

public interface Command {
	void execute();

	void undo();
}

 

 Receiver.java

 

package com.flyingh.ireceiver;

public interface Receiver {
	void on();

	void off();
}

 

 MacroOnCommand.java

 

package com.flyingh.command;

import java.util.List;

import com.flyingh.icommand.Command;
import com.flyingh.ireceiver.Receiver;

public class MacroOnCommand implements Command {
	private List<Receiver> list;

	public MacroOnCommand(List<Receiver> list) {
		super();
		this.list = list;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method stub
		for (Receiver receiver : list) {
			receiver.on();
		}
	}

	@Override
	public void undo() {
		// TODO Auto-generated method stub
		for (Receiver receiver : list) {
			receiver.off();
		}
	}

}

 

 MacroOffCommand.java

 

package com.flyingh.command;

import java.util.List;

import com.flyingh.icommand.Command;
import com.flyingh.ireceiver.Receiver;

public class MacroOffCommand implements Command {
	private List<Receiver> list;

	public MacroOffCommand(List<Receiver> list) {
		super();
		this.list = list;
	}

	@Override
	public void execute() {
		// TODO Auto-generated method stub
		for (Receiver receiver : list) {
			receiver.off();
		}
	}

	@Override
	public void undo() {
		// TODO Auto-generated method stub
		for (Receiver receiver : list) {
			receiver.on();
		}
	}

}

 

 Light.java

 

package com.flyingh.receiver;

import com.flyingh.ireceiver.Receiver;

public class Light implements Receiver {

	@Override
	public void on() {
		// TODO Auto-generated method stub
		System.out.println("turn on the light!");
	}

	@Override
	public void off() {
		// TODO Auto-generated method stub
		System.out.println("turn off the light!");
	}

}

 

 TV.java

 

package com.flyingh.receiver;

import com.flyingh.ireceiver.Receiver;

public class TV implements Receiver {

	@Override
	public void on() {
		// TODO Auto-generated method stub
		System.out.println("turn on the TV!");
	}

	@Override
	public void off() {
		// TODO Auto-generated method stub
		System.out.println("turn off the TV!");
	}

}

 

 Radio.java

 

package com.flyingh.receiver;

import com.flyingh.ireceiver.Receiver;

public class Radio implements Receiver {

	@Override
	public void on() {
		// TODO Auto-generated method stub
		System.out.println("turn on the radio!");
	}

	@Override
	public void off() {
		// TODO Auto-generated method stub
		System.out.println("turn off the radio!");
	}

}

 

 Invoker.java

 

package com.flyingh.invoker;

import com.flyingh.icommand.Command;

public class Invoker {
	private Command macroOnCommand;
	private Command macroOffCommand;
	private Command macroUndoCommand;

	public Invoker() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Invoker(Command lightOnCommand, Command lightOffCommand) {
		super();
		this.macroOnCommand = lightOnCommand;
		this.macroOffCommand = lightOffCommand;
	}

	public void onButtonClick() {
		macroOnCommand.execute();
		macroUndoCommand = macroOnCommand;
	}

	public void offButtonClick() {
		macroOffCommand.execute();
		macroUndoCommand = macroOffCommand;
	}

	public void undoButtonClick() {
		macroUndoCommand.undo();
	}
}

 

Client.java

 

package com.flyingh.client;

import java.util.ArrayList;
import java.util.List;

import com.flyingh.command.MacroOffCommand;
import com.flyingh.command.MacroOnCommand;
import com.flyingh.icommand.Command;
import com.flyingh.invoker.Invoker;
import com.flyingh.ireceiver.Receiver;
import com.flyingh.receiver.Light;
import com.flyingh.receiver.Radio;
import com.flyingh.receiver.TV;

public class Client {
	public static void main(String[] args) {
		Receiver light = new Light();
		Receiver tv = new TV();
		Receiver radio = new Radio();

		List<Receiver> list = new ArrayList<Receiver>();
		list.add(light);
		list.add(tv);
		list.add(radio);

		Command macroOnCommand = new MacroOnCommand(list);
		Command macroOffCommand = new MacroOffCommand(list);

		Invoker invoker = new Invoker(macroOnCommand, macroOffCommand);
		invoker.onButtonClick();
		invoker.offButtonClick();
		invoker.undoButtonClick();
	}
}

 

 程序运行结果如下:

 

turn on the light!
turn on the TV!
turn on the radio!
turn off the light!
turn off the TV!
turn off the radio!
turn on the light!
turn on the TV!
turn on the radio!
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值