Java设计模式-行为型-命令模式

在很多程序员的开发过程可能都不知不觉中用到了这种模式,比如在使用对象的多个方法时候,有methodA,methodB,methodC三个方法可供使用,方法使用者对三个方法是使用是随机组合的。代码如下:

public class RemoteControl {

    public void action1() {
        Plane plane = new Plane();
        plane.methodA();
        plane.methodB();
    }

    public void action2() {
        Plane plane = new Plane();
        plane.methodB();
        plane.methodC();
    }

}

代码中RemoteControl依赖着Plane类,如果这个时候methodB需要增加一个参数或者是action2也要使用methodA方法,是不是就要修改RemoteControl类了,命令模式其实就是取消这种强耦合。需要在RemoteControl和Plane之间增加一层Command。

举一个遥控器(RemoteControl)遥控飞机(Plane)的例子,我们需要在中间一层命令信号(Command)。

public class Plane {

    public void up() {
        System.out.println("Wing Up!");
        System.out.println("Fly Up!");
    }

    public void down() {
        System.out.println("Wing Down!");
        System.out.println("Fly Down!");
    }

}
public interface Command {

    public void move();

}
public class UpCommand implements Command {
    private Plane plane;

    public UpCommand() {
        this.plane = new Plane();
    }

    @Override
    public void move() {
        plane.up();
    }

}

public class DownCommand implements Command {
    private Plane plane;

    public DownCommand() {
        this.plane = new Plane();
    }

    @Override
    public void move() {
        plane.down();
    }
}
public class RemoteControl {

    private Command command;

    public RemoteControl(Command command) {
        this.command = command;
    }

    public void controlPlane() {
        command.move();
    }

}

上面代码中,由原来的RemoteControl直接操作飞机move,改为由RemoteCommand来操作。这的情况下,如果Plane的up方法过期并改为up2(),那么在RemoteCommand里面进行修改即可,完全不需要改动RemoteControl类。

新建一个Person类用于玩遥控飞机:

public class Person {

    public static void main(String[] args) {
        Command upCommand = new UpCommand();
        RemoteControl control = new RemoteControl(upCommand);
        control.controlPlane();

        Command downCommand = new UpCommand();
        control = new RemoteControl(downCommand);
        control.controlPlane();
    }

}

Person类中的操作就是先让飞机up,再让飞机down。

综合例子来讲命令模式的缺点,如果现在需要增加一个命令让飞机先上后下的合并操作,我们只能增加一个UpAndDownCommand类,继承Command接口。如果后面还有各式各样的命令呢,会造成命令类越来越多,系统也就主键变的复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值