命令模式

原创 2016年08月29日 13:44:12

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

//项目小组抽象类
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();
    }
}

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

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

设计模式之命令模式---Command Pattern

模式的定义命令模式是一个高内聚的模式,定义如下:Encapsulate a request as an object,thereby letting you parameterize clients ...
  • hfreeman2008
  • hfreeman2008
  • 2016年08月06日 10:37
  • 1582

命令模式应用场景

Command模式通常可应用到以下场景:    1 Multi-level undo(多级undo操作)      如果系统需要实现多级回退操作,这时如果所有用户的操作都以command对象的形式...
  • zdsicecoco
  • zdsicecoco
  • 2016年05月06日 16:06
  • 3313

命令模式(Command Pattern)(一):命令模式介绍

一、意图              将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 二、适用性 ...
  • jialinqiang
  • jialinqiang
  • 2013年05月18日 23:16
  • 2902

命令模式(Command Pattern)(二):HeadFirst中的遥控器

一、问题描述 使用命令模式实现遥控器,遥控器上的不同按钮控制电灯的开关及亮度、天花板风扇的开关及转速等,支持撤销。 具体按钮:开灯/关灯按钮、暗光开/关按钮、风扇高速/中速/低速/关按钮、...
  • jialinqiang
  • jialinqiang
  • 2013年05月18日 23:15
  • 1812

Android源码中的命令模式

前面跟大家分享了装饰者模式、观察者模式、静态工厂方法、工厂方法模式,今天跟大家分享下Android源码中的命令模式。...
  • sdkfjksf
  • sdkfjksf
  • 2016年10月08日 13:41
  • 3150

java回调机制以及和java命令模式的关系

java的接口定义以及向上转型是理解回调的基础;使用接口的核心原因:为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。匿名类。代码随处可见new SthInterface(...
  • dsc114
  • dsc114
  • 2015年03月26日 00:07
  • 2909

设计模式项目实战--命令模式

开通博客已经很多年了,习惯性的看别人写的技术博客,自己确从来没有写的打算。原因有两种,一是觉得写一篇好的博客确实要花费很多时间,时间=金钱吧,毕竟不是啥大师,能够做到信手拈来。二是觉得才疏学浅,写的博...
  • zhangfan1212
  • zhangfan1212
  • 2014年03月14日 21:03
  • 884

java设计模式 命令模式的优点

命令模式的优点: 1. 在命令模式中, 请求者不直接与接收者交互, 即请求者不包含接收者的引用, 因此彻底消除了彼此之间的耦合. 2. 命令模式满足"开-闭"原则. 如果增加新的具体命令和该命...
  • fujianianhua
  • fujianianhua
  • 2011年12月28日 20:31
  • 2008

命令模式(遥控器模式)

一,命令模式的实现:命令模式里边一般都有以下几个角色:客户端,请求者,命令接口,命令实现,接受者,下边是简单命令模式的实现代码实现:  1  public class Client{ 2      p...
  • liruizhuang
  • liruizhuang
  • 2010年08月17日 22:56
  • 2802

策略模式与命令模式的区别 是什么?

策略模式 把易于变化的行为分别封装起来,让它们之间可以互相替换, 让这些行为的变化独立于拥有这些行为的客户。   GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且...
  • u013700340
  • u013700340
  • 2014年04月30日 16:17
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:命令模式
举报原因:
原因补充:

(最多只允许输入30个字)