设计模式12 - 命令模式【Command Pattern】

简介: 设计模式12 - 命令模式【Command Pattern】

命令模式

定义:

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。而命令模式就是将“行为请者”与“行为实现者”解耦的。

类图:

举例(客户提出需求给需求部门、美工部门、开发部门):

描述:

客户(Client)如果提出一个需求(Command),增加语音识别功能。没使用命令模式之前,客户(Client)是这样操作的,先通知需求部门(Receiver1),再通知美工部门(Receiver2),再通知开发部门(Receiver3),这样的话,是十分繁琐的,所以引出了命令模式。

……

命令模式是这样处理的,找出一个代表(invoker),让代表去执行我发出的需求(Command)。这样做的话,可以把客户和所有部门解耦了,让代表去执行命令即可。

上面就描述完了业务了,下面看下代码吧(代码其实不是重点,主要是业务)


Receiver:

/**
*部门抽象
*/
public abstract class Group { 
    public abstract void find(); //被要求增加功能
    public abstract void add(); //被要求删除功能
    public abstract void delete(); //被要求修改功能
    public abstract void change();
    //被要求给出所有的变更计划 
    public abstract void plan();
}
/**
*需求部门
*/
public class RequirementGroup extends Group {
    public void find() {
        System.out.println("找到需求组..."); 
    }
    public void add() {
        System.out.println("客户要求增加一项需求..."); 
    }
    //客户要求修改一项需求 
    public void change() {
        System.out.println("客户要求修改一项需求...");
    }
    //客户要求删除一项需求 
    public void delete() {
        System.out.println("客户要求删除一项需求..."); 
    }
    //客户要求出变更计划 
    public void plan() {
        System.out.println("客户要求需求变更计划..."); 
    } 
}
/**
*美工部门
*/
public class PageGroup extends Group {
    ......
}
/**
*开发部门
*/
public class CodeGroup extends Group {
    ......
}

Command:

public abstract class Command {
    //需求组 
    protected RequirementGroup rg = new RequirementGroup(); 
    //美工组
    protected PageGroup pg = new PageGroup();  
    //代码组
    protected CodeGroup cg = new CodeGroup(); 
    //只要一个方法,你要我做什么事情 
    public abstract void execute();
}
/**
* 比如是增加需求命令
*/
public class AddRequirementCommand extends Command { 
    //执行增加一项需求的命令
    public void execute() {
    //找到需求组 
    super.rg.find();
    //增加一份需求 
    super.rg.add();
    //页面也要增加 
    super.pg.add();
    //功能也要增加 
    super.cg.add();
    //给出计划
    super.rg.plan(); 
    }
}

Invoker:

public class Invoker { 
    //什么命令
    private Command command;
    //客户发出命令
    public void setCommand(Command command){
        this.command = command; 
    }
    //执行客户的命令
    public void action(){
        this.command.execute();
    }
}

Client:

public class Client {
    public static void main(String[] args) { 
    //定义我们的接头人
    Invoker xiaoSan = new Invoker(); //接头人就是我小三
    //客户要求增加一项需求 
    System.out.println("-------------客户要求增加一项需求-----------------"); 
    //客户给我们下命令来
    Command command = new AddRequirementCommand();
    //接头人接收到命令 
    xiaoSan.setCommand(command);
    //接头人执行命令 
    xiaoSan.action();
}

目录
相关文章
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
16天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
23天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
22 1
|
2月前
|
设计模式 存储 Java
【设计模式】命令模式
【设计模式】命令模式
|
4月前
|
设计模式 Java
设计模式-命令模式
设计模式-命令模式
33 1
|
4月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
32 0
|
4月前
|
设计模式 存储 Java
Java设计模式-命令模式
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。
29 1
Java设计模式-命令模式
|
4月前
|
设计模式 Go 开发工具
Golang设计模式——06命令模式
Golang设计模式——06命令模式
20 0
|
4月前
|
设计模式 存储 前端开发
【设计模式】之命令模式
命令模式是一种非常有用的设计模式,在前端开发中经常用于管理和执行操作。它通过将操作封装成对象,并将其作为参数传递、存储或记录,实现了优雅地管理和执行操作。通过使用命令模式,我们可以提高代码的可维护性和可扩展性。然而,在应用命令模式时需要权衡其带来的优缺点,并根据具体情况进行选择。
40 0
|
4月前
|
设计模式 存储 算法
【设计模式】命令模式
欢迎来到【设计模式】系列博客,今天我们将探讨其中一种重要的设计模式——命令模式。设计模式是软件开发中解决常见问题的最佳实践,而命令模式则是其中一种非常实用的设计模式,它可以帮助我们更好地组织和管理请求或命令。在本篇博客中,我们将详细介绍命令模式的定义、特点、使用场景以及实现方式。通过具体的案例和实践,我们将深入了解命令模式在实际项目中的应用和优势。同时,我们还将分享一些注意事项和最佳实践,以帮助您更好地理解和应用命令模式。
56 1
【设计模式】命令模式