设计模式-行为型模式-命令模式

简介:

设计模式-行为型模式-命令模式

基础

以一个MIS系统为栗子

MIS 管理信息系统(Management Information System,MIS)是一个以人为主导的,利用计算机硬件、软件和网络设备,进行信息的收集、传递、存储、加工、整理的系统,以提高组织的经营效率。

代码如下

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(){
        
    }
    // 客户要求增加需求
    public void add(){
    }
    // 客户要求修改需求
    public void change(){
    }
    // 客户要求删除需求
    public void delete(){
    }
    // 客户要求给出变更计划
    public void plan(){
    }
}
// 美工组
public class PageGroup extends Group{
    // 找到美工组
    public void find(){
    }
    // 客户要求增加页面
    public void add(){
    }
    // 客户要求对现有界面修改
    public void change(){
    }
    // 客户要求删除页面
    public void delete(){
    }
    // 给出计划
    public void plan(){
    }
}
// 代码组
public class CodeGroup extends Group {
    // 客户要求过去谈
    public void find(){
    }
    // 客户要求增加功能
    public void add(){
    }
    // 客户要求修改功能
    public void change(){
    }
    // 客户要求删除功能
    public void delete(){
    }
    // 客户要求变更计划
    public void plan(){
    }
}

最后书写场景类

// 场景类
public class Client{
    public static void main(String[] args){
        // 客户找到需求要求谈需求进行修改
        Grop rg = new RequirementGroup();
        // 找到需求组
        rg.find();
        // 增加需求组
        rg.add();
        // 变更计划
        rg.plan();
    }
}

此时客户要求多一个界面

public class Client {
    public static void main(String[] args){
        Group pg = new PangeGroup();
        // 找到需求组
        pg.find();
        // 删除需求组
        pg.delete();
        // 需求变更
        pg.plan();
    }
}

变更

客户每次都要单独找一个,非常复杂,设置一个负责人,负责和客户和需求,美工之间的连接。

// 抽象出命令类
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.rg.plan();
    }
}

增加删除页面的命令

public class DeletePageCommand extends Command{
    public void execute(){
        // 找到页面组
        super.pg.find();
        // 删除页面
        super.rg.delete();
        // 给出计划
        super.rg.plan();
    }
}

最后再将这也命令封装,成一个负责人

public class invoker {
    // 命令
    private Command command;
    // 客户发出命令
    public void setCommand(Command command){
        this.command = command;
    }
    // 客户自行命令
    public void action(){
        this.command.execute();
    }
}

最后场景类如下

public class Client{
    public static void main(String[] args){
        // 定义接头人
        invoker xiaoSan = new Invoker();    // 接头人
        // 客户增加需求
        // 客户下命令
        Command command = new AddRequirementCommand();
        // 街头人收到命令
        xiaoSan.setCommand(command);
        // 街头人执行命令
        xiaoSan.action();
    }
}

继续更改

由于负责人的抽象类中声明了所有的,所以可以分离
代码如下

public abstract class Command {
    // 定义子类全局共享变量
    protected final Receiver receiver;
    // 实现类名需要接收
    public Command(Receiver _receiver){
        this.receiver = _receiver;
    }
    // 每个命令需要有执行
    public abstract void execute();
}

然后在Command中声明接收者。
通过构造函数指定

public class ConcreteCommand1 extends Command{
    // 声明自己默认接收者
    public ConcreteCommand1(){
        super(new ConcreteReciver1());
    }
    // 设置新的接受
    public ConcreteCommand1(Receiver _receiver){
        super(_receiver);
    }
    // 处理
    public void execute(){
        super.receiver.doSomething();
    }
}
// 声明场景
public class Client{
    public static void main(String[] args){
        invoker invoker = new invoker();
        // 定义要发送的命令
        Command command = new ConcreteCommand1();
        invoker.setCommand(command);
        invoker.action();
    }
}

总结

将需求封装成命令,然后再负责人当中封装,最后,需要的时候,直接调用负责人,将命令传入进去即可。

目录
相关文章
|
9天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
3月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
4月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
5月前
|
设计模式 算法 Java
【十六】设计模式~~~行为型模式~~~策略模式(Java)
文章详细介绍了策略模式(Strategy Pattern),这是一种对象行为型模式,用于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法独立于使用它的客户而变化,提高了系统的灵活性和可扩展性。通过电影院售票系统中不同类型用户的打折策略案例,展示了策略模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和测试结果。
【十六】设计模式~~~行为型模式~~~策略模式(Java)
|
5月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
5月前
|
设计模式 存储 前端开发
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
文章详细介绍了观察者模式(Observer Pattern),这是一种对象行为型模式,用于建立对象之间的一对多依赖关系。当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。文中通过交通信号灯与汽车的案例以及多人联机对战游戏的设计方案,阐述了观察者模式的动机和应用场景。接着,文章介绍了观察者模式的结构、角色、优点、缺点以及适用情况,并通过代码示例展示了如何在Java中实现观察者模式。此外,还探讨了观察者模式在MVC架构中的应用以及Java中对观察者模式的支持。
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
|
5月前
|
设计模式 前端开发 Java
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
文章详细介绍了中介者模式(Mediator Pattern),这是一种对象行为型模式,用于封装一系列对象的交互,降低系统耦合度,并简化对象之间的交互关系。通过案例分析、结构图、时序图和代码示例,文章展示了中介者模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
【十三】设计模式~~~行为型模式~~~中介者模式(Java)
|
5月前
|
设计模式 安全 Go
[设计模式]行为型模式-观察者模式
[设计模式]行为型模式-观察者模式
|
5月前
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
5月前
|
设计模式 算法 测试技术
[设计模式]行为型模式-策略模式
[设计模式]行为型模式-策略模式