zoukankan      html  css  js  c++  java
  • 命令模式

    背景简介:
    开发软件,项目划分几个小组:需求组,美工组,代码组。
    开发流程,客户提出需求=》需求分析=》美工设计界面=》写代码实现功能

    //项目小组抽象类
    public abstract class Group
    {
    	public abstract void find();
    	public abstract void add();
    	public abstract void delete();
    	public abstract void change();
    	public abstract void action();
    }
    
    //需求组
    public class XuqiuGroup extends Group
    {
        public void find()
        {
            //找到需求人员
        }
        public void add()
        {
            //叫需求人员增加页面
        }
        public void delete()
        {
            //叫需求人员删除页面
        }
        public void change()
        {
            //叫需求人员修改页面
        }
        public void action()
        {
            //叫需求人员执行以上动作
        }
    }
    
    //美工组
    public class MeigongGroup extends Group
    {
        public void find()
        {
            //找到美工
        }
        public void add()
        {
            //叫美工增加页面
        }
        public void delete()
        {
            //叫美工删除页面
        }
        public void change()
        {
            //叫美工修改页面
        }
        public void action()
        {
            //叫美工执行以上动作
        }
    }
    
    //代码组
    public class CodeGroup extends Group
    {
        public void find()
        {
            //找到程序员
        }
        public void add()
        {
            //叫程序员增加页面
        }
        public void delete()
        {
            //叫程序员删除页面
        }
        public void change()
        {
            //叫程序员修改页面
        }
        public void action()
        {
            //叫程序员执行以上动作
        }
    }
    
    
    public class Client
    {
        public void static main()
        {
            XuqiuGroup xg = new XuqiuGroup();
            xg.find();  //找到需求
            xg.add();   //增加一个页面
            xg.action();//给我去执行
            //找完需求后又去找美工再去找程序员。客户很累,发火了,你们给我一个接头人。
            //我不管你们内部如何实现,我只想告诉你们我想要什么,你们给我去做就行。
        }
    }
    

    客户的想法随时改变,一会增加功能、一会删除。然后,还得把想法跟每个组沟通。疲于奔命。
    客户是甲方,他说这样修改需求太累了,我还得找这么多组的人来商量如何处理一个需求。
    这样吧,你们找个接头人给我,我只需要把我的想法告诉他,至于内部怎么实现我不管,你们自己商量好如何去做。

    于是,把客户的想法封装成一个个的命令,比如增加需求的命令 和 删除需求的命令。
    再来找个接头人,让他把这个命令分发到每个组执行下去。

    public abstract class Command
    {
        protected XuqiuGroup xg = new XuqiuGroup();
        protected MeigongGroup mg = new MeigongGroup();
        protected CodeGroup cg = new CodeGroup();
        public abstract void excute();  //你要我做什么我就做什么
    }
    
    //增加需求命令
    public class AddXuqiuCommand extends Command
    {
        //找到需求方 增加需求,再让美工 设计界面,最后让程序员实现功能
        public void excute()
        {
            xg.find();
            xg.add();
            xg.action();
            mg.find();
            mg.add();
            mg.action();
            cg.find();
            cg.add();
            cg.action();
        }
    }
    
    //删除需求命令
    public class DelXuqiuCommand extends Command
    {
        //找到需求方 删除需求,最后让程序员删除该功能
        public void excute()
        {
            xg.find();
            xg.add();
            xg.action();
            cg.find();
            cg.add();
            cg.action();
        }
    }
    
    //调度器 接头人
    public class Invoker
    {
        private Command command;
        //客户向我发出命令
        public void setCommand(Command command)
        {
            this.command = command;
        }
        //执行客户给的命令
        public void action()
        {
            command.excute();
        }
    }
    
    public class Client
    {
        public static void main()
        {
            //接头人 你来给我执行一个 增加需求的命令
            Invoker invoker = new Invoker();
            invoker.setCommand(new AddXuqiuCommand());
            invoker.action();
            //接头人 你来给我执行一个 删除需求的命令
            invoker.setCommand(new DelXuqiuCommand());
            invoker.action();
        }
    }
    

    最终,这么实现就轻松很多了,客户不需要找到每个组下达命令。

    但是,命令模式同时也有个缺点,当命令的组合情况复杂的时候,就是封装的命令就有很多。

  • 相关阅读:
    带你了解数据库的“吸尘器”:VACUUM
    基于深度学习的两种信源信道联合编码
    6大创新技术及2亿美元投入计划,这个活动有点料
    MindSpore实践:对篮球运动员目标的检测
    如何正确使用Python临时文件
    一段java代码是如何执行的?
    TensorFlow csv读取文件数据(代码实现)
    TensorFlow优化器及用法
    TensorFlow损失函数
    回归算法分类,常用回归算法解析
  • 原文地址:https://www.cnblogs.com/zhuojun/p/5817697.html
Copyright © 2011-2022 走看看