美文网首页
23种设计模式之命令模式

23种设计模式之命令模式

作者: 阿跳爱学习 | 来源:发表于2019-01-23 23:32 被阅读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

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

    相关文章

      网友评论

          本文标题:23种设计模式之命令模式

          本文链接:https://www.haomeiwen.com/subject/vplsjqtx.html