zoukankan      html  css  js  c++  java
  • 无废话设计模式(18)行为型模式--命令模式

    0-前言

      命令模式定义(Command):

        将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;

        对请求排队或记录请求日志,以及支持可撤销的操作;

    1-实现

    1-1、简单UML图

    1-2、代码实现

    //1、命令执行者(Receiver--小兔崽子)
    class Son
    {
        //做饭
        public void Cooking()
        {
            System.out.println("小兔崽子乖乖做饭去了");
        }
        //喂猪
        public void FeedPigs()
        {
            System.out.println("小兔崽子乖乖喂猪去了");
        }
    }
    
    //2、命令抽象父类(Command)
    abstract class  Command
    {
        //设置命令执行者
        protected Son son;
        public Command(Son _son)
        {
            this.son = _son;
        }
    
        //执行命令
        public  abstract void  Execute();
    }
    
    //2-1、具体命令A(做饭)
    class CommandCooking extends Command
    {
        public CommandCooking(Son _son)
        {
            super(_son);
        }
    
        //执行命令
    
        @Override
        public void Execute()
        {
            son.Cooking();
        }
    }
    
    //2-2、具体命令B(喂猪)
    class CommandFeedpigs extends Command
    {
        public CommandFeedpigs(Son _son)
        {
            super(_son);
        }
    
        //执行命令
    
        @Override
        public void Execute()
        {
            son.FeedPigs();
        }
    }
    
    //3、命令传达者(Invoker---老爹)
    class  Father
    {
        private Command command;
        //A、设置命令
        public void setCommand(Command command)
        {
            this.command = command;
        }
    
        //B、要求执行命令
        public void Doing()
        {
            command.Execute();
        }

    客户端

            Son son = new Son();
            Command cooking = new CommandCooking(son);
            Command feedpigs = new CommandFeedpigs(son);
    
            Father father = new Father();
            //做饭
            father.setCommand(cooking);
            father.Doing();
            //喂猪
            father.setCommand(feedpigs);
            father.Doing();

    运行结果

    2-应用场景简单总结

    1、当需要抽象出需要执行的动作以便参数化某个对象时;

    2、当需要在不同的时候执行、排列、执行请求时;

    3、当系统需要支持取消操作时;

    4、当系统需要记录、修改日志时;

  • 相关阅读:
    函数参数的讨论
    redirect-windows-cmd-stdout-and-stderr-to-a-single-file
    rust 多文件工程
    rust: 默认初始化,函数重载
    VSCode如何格式化所有文件
    FLV协议5分钟入门浅析
    WebRTC:数据传输相关协议简介
    WebSocket协议:5分钟从入门到精通
    Nodejs进阶:crypto模块中你需要掌握的安全基础知识
    前端进阶之路:如何高质量完成产品需求开发
  • 原文地址:https://www.cnblogs.com/yanghj/p/13451540.html
Copyright © 2011-2022 走看看