23种设计模式之命令模式

2019-01-23  本文已影响0人  阿跳爱学习

几乎用不上,了解一下,做个笔记。

优点:降低了系统耦合度。
缺点:使用命令模式可能会导致某些系统有过多的具体命令类。

例子:模拟红军打仗接受命令模式。
创建命令的执行者:

import android.util.Log;

/**
 * 命令的执行者
 */

public class Receiver {

    public void action() {
        Log.d("TAG", "夺回丢失省份,强壮中华民族!");
    }

    public void unAction(){
        Log.d("TAG", "命令撤销,计划暴露,改日再攻击!");
    }
}

抽象命令接口:

/**
 * 抽象命令接口
 */

public interface Command {
    void execute();
    void cancel();
}

实现抽象命令接口:

/**
 * 命令实现类
 */

public class ConcreteCommand implements Command {

    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        super();
        this.receiver = receiver;
    }

    @Override
    public void execute() {
        receiver.action();
    }

    @Override
    public void cancel() {
        receiver.unAction();
    }
}

创建命令发起者:

/**
 * 命令发起者
 */

public class Invoke {

    private Command command;

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

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

    public void unCall(){
        command.cancel();
    }
}

调用:

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建命令对象,并指定它的接受者
        Command command = new ConcreteCommand(new Receiver());
        //创建命令执行者,并将相应的命令作为参数传递给Invoker
        Invoke invoke = new Invoke(command);
        invoke.call();
        invoke.unCall();
    }
}
结果: image.png

已完成测试!有不对的地方欢迎指出,感恩。

上一篇下一篇

猜你喜欢

热点阅读