首页 > 数据库 > 数据库开发技术 > 命令模式--进攻,秘密武器



/**
* 命令接口
* @author zhanyd
* @date 2020-12-26
*/
public interface Command {
public void execute();
}
/**
* 具体的进攻命令类
* @author zhanyd
* @date 2020-12-26
*/
public class FireCommand {
Command command;
public void setCommand(Command command) {
this.command = command;
}
public void fire() {
command.execute();
}
}
/**
* 投石车类
*/
public class Catapult {
/**
* 装载石头
*/
public void loadStone() {
System.out.println("投石车装载石头。。。");
}
/**
* 瞄准目标
*/
public void aim() {
System.out.println("投石车瞄准目标。。。");
}
/**
* 发射
*/
public void fire() {
System.out.println("投石车发射!");
}
}
/**
* 投石车攻击类
* @author zhanyd
* @date 2020-12-26
*/
public class CatapultFireCommand implements Command{
private Catapult catapult;
public CatapultFireCommand(Catapult catapult) {
this.catapult = catapult;
}
/**
* 投石车攻击
*/
@Override
public void execute() {
catapult.loadStone();
catapult.aim();
catapult.fire();
}
}
/**
* 冲车类
*/
public class RushCar {
/**
* 移动
*/
public void move() {
System.out.println("冲车向目标移动。。。");
}
/**
* 撞击
*/
public void hit() {
System.out.println("冲车撞击!");
}
}
/**
* 冲车攻击类
* @author zhanyd
* @date 2020-12-26
*/
public class RushCarFireCommand implements Command {
private RushCar rushCar;
public RushCarFireCommand(RushCar rushCar) {
this.rushCar = rushCar;
}
/**
* 冲车攻击
*/
@Override
public void execute() {
rushCar.move();
rushCar.hit();
}
}
/**
* 魔法师类
*/
public class Magician {
/**
* 吟唱
*/
public void chant() {
System.out.println("魔法师吟唱咒语。。。");
}
/**
* 召唤陨石
*/
public void summonMeteor() {
System.out.println("魔法师召唤陨石!");
}
}
/**
* 魔法师攻击类
* @author zhanyd
* @date 2020-12-26
*/
public class MagicianFireCommand implements Command{
private Magician magician;
public MagicianFireCommand(Magician magician) {
this.magician = magician;
}
/**
* 魔法师攻击
*/
@Override
public void execute() {
magician.chant();
magician.summonMeteor();
}
}
/**
* 攻击测试类
* @author zhanyd
* @date 2020-12-26
*/
public class FireTest {
public static void main(String[] args) {
FireCommand fireCommand = new FireCommand();
// 投石车攻击
Catapult catapult = new Catapult();
CatapultFireCommand catapultFireCommand = new CatapultFireCommand(catapult);
fireCommand.setCommand(catapultFireCommand);
fireCommand.fire();
// 冲车攻击
RushCar rushCar = new RushCar();
RushCarFireCommand rushCarFireCommand = new RushCarFireCommand(rushCar);
fireCommand.setCommand(rushCarFireCommand);
fireCommand.fire();
// 魔法师攻击
Magician magician = new Magician();
MagicianFireCommand magicianFireCommand = new MagicianFireCommand(magician);
fireCommand.setCommand(magicianFireCommand);
fireCommand.fire();
}
}
投石车装载石头。。。
投石车瞄准目标。。。
投石车发射!
冲车向目标移动。。。
冲车撞击!
魔法师吟唱咒语。。。
魔法师召唤陨石!

/**
* 批量进攻命令类
* @author zhanyd
* @date 2020-12-26
*/
public class BatchFireCommand {
List<Command> commandList = new ArrayList<Command>();
public void addCommand(Command command) {
this.commandList.add(command);
}
public void fire() {
commandList.stream().forEach(f -> f.execute());
}
}
/**
* 批量攻击测试类
* @author zhanyd
* @date 2020-12-26
*/
public class BathFireTest {
public static void main(String[] args) {
BatchFireCommand batchFireCommand = new BatchFireCommand();
// 魔法师攻击
Magician magician = new Magician();
MagicianFireCommand magicianFireCommand = new MagicianFireCommand(magician);
batchFireCommand.addCommand(magicianFireCommand);
// 投石车攻击
Catapult catapult = new Catapult();
CatapultFireCommand catapultFireCommand = new CatapultFireCommand(catapult);
batchFireCommand.addCommand(catapultFireCommand);
// 冲车攻击
RushCar rushCar = new RushCar();
RushCarFireCommand rushCarFireCommand = new RushCarFireCommand(rushCar);
batchFireCommand.addCommand(rushCarFireCommand);
// 一起上
batchFireCommand.fire();
}
}
魔法师吟唱咒语。。。
魔法师召唤陨石!
投石车装载石头。。。
投石车瞄准目标。。。
投石车发射!
冲车向目标移动。。。
冲车撞击!

原文作者:编程我也会;如有侵权,请联系管理员删除。