设计23式—命令

来源:互联网 发布:市场份额数据优缺点 编辑:程序博客网 时间:2024/06/15 06:14
/* * 命令模式 * 优点 * 类间解耦,调用者角色与接收者角色之间没有任何依赖关系 * 可扩展性,Command的子类可以非常容易地扩展 * 缺点 * 命令越多,Command类越膨胀(可通过模板方法模式降低) */public class MyMain {public static void main(String[] args) {// 实例一个具体的传令官Invoker invoker = new Invoker();System.out.println("将军要求炮兵攻击,空军攻击");// 实例C号将军命令Command command = new CommandC();// 传令官接受命令invoker.setCommand(command);// 执行命令invoker.action();}}// 抽象的军队类(接收者:干活的)abstract class Army {// 抽象的攻击方法abstract public void attack();// 抽象的撤退方法abstract public void retreat();}// 具体的炮兵军队class Artillery extends Army {@Overridepublic void attack() {System.out.println("炮兵军队开始攻击");}@Overridepublic void retreat() {System.out.println("炮兵军队开始撤退");}}// 具体的空军军队class AirForce extends Army {@Overridepublic void attack() {System.out.println("空军军队开始攻击");}@Overridepublic void retreat() {System.out.println("空军军队开始撤退");}}// 抽象的将军命令(命令:需要执行的所有命令)abstract class Command {// 炮兵部队Artillery artillery = new Artillery();// 空军部队AirForce airForce = new AirForce();// 命令执行方式abstract public void execute();}// 具体的A号将军命令(炮兵攻击,空军撤退)class CommandA extends Command {public CommandA() {System.out.println("生成A号命令:炮兵攻击,空军撤退");}@Overridepublic void execute() {artillery.attack();airForce.retreat();}}// 具体的B号将军命令(空军攻击,炮兵撤退)class CommandB extends Command {public CommandB() {System.out.println("生成B号命令:空军攻击,炮兵撤退");}@Overridepublic void execute() {airForce.attack();artillery.retreat();}}// 具体的C号将军命令(空军攻击,炮兵攻击)class CommandC extends Command {public CommandC() {System.out.println("生成C号命令:空军攻击,炮兵攻击");}@Overridepublic void execute() {airForce.attack();artillery.attack();}}// 传令官(调用者:接收到命令,并执行命令)class Invoker {private Command command = null;// 接受命令public void setCommand(Command command) {System.out.println("传令官接受命令");this.command = command;}// 执行命令public void action() {System.out.println("传令官执行命令");command.execute();}}

原创粉丝点击