设计模式_命令模式

命令模式

介绍

定义案例问题堆积在哪里解决办法

行为形设计模式


就是把 “发布命令 执行命令”细化为多个角色
每个角色又能继续细化

发布命令

1 打印1-9

a 打印A-G

如果有更多的命令
命令处理方式更加多样性 更复杂
处理命令的顺序
拆分角色:降低耦合度
命令类(一个命令一个类)

具体接收类(具体的处理命令 当前
用静态方法代替)

执行执行

先进先执行
新进后执行
优先等级高的先执行
)可以设置多种优先等级

类图

1 . 一个命令接口类

2 “命令接口类” 包含了 “处理类”

3 传给了“调用方” 来定义如何调用

代码

角色1  BaseCommand :抽象命令

角色2.1 Command1 :具体命令1

角色2.2 CommandA :具体命令2

角色3 Receiver:具体命令处理

角色4 Invoke:执行方

BaseCommand


public abstract class BaseCommand
{
    // 委托:命令
    public delegate void ExecuteCommand();
    public ExecuteCommand executeCommand = null;

    public BaseCommand(ExecuteCommand executeCommand)
    {
        this.executeCommand += executeCommand;
    }

    // 执行命令
    public abstract void Execute();
}

Command1


public class Command1 : BaseCommand
{
    public Command1(ExecuteCommand executeCommand)
       : base(executeCommand)
    {

    }

    public override void Execute()
    {
        if (null != executeCommand)
            executeCommand();
    }
}

CommandA


public class CommandA : BaseCommand
{
    public CommandA(ExecuteCommand executeCommand)
        : base(executeCommand)
    {
    }

    public override void Execute()
    {
        if (null != executeCommand)
            executeCommand();
    }
}

Receiver

using UnityEngine;

/// <summary>
/// 功能集合
/// </summary>
public class Receiver
{
    static public void Show1to9()
    {
        Debug.Log("打印:123456789!");
    }

    static public void showAtoG()
    {
        Debug.Log("打印:ABCDEFG!");
    }
}

Invoke

/// <summary>
/// 调用者 
/// 可以继续扩展:
/// 1 收集命令
/// 2 命令顺序不同 倒序 或者 特殊优先级高的先执行
/// 3 扩展为设计模式深入设计
/// </summary>
public class Invoke
{
    private BaseCommand commend = null;

    Invoke() { }
    public Invoke(BaseCommand commend)
    {
        this.commend = commend;
    }

    public void Execute()
    {
        commend.Execute();
    }
}

运行代码

using System;
using UnityEngine;

public class TestML : MonoBehaviour
{
    void Start()
    {
        BaseCommand command = null;
        string strCommand = "1";

        switch (strCommand)
        {
            case "A":
                command = new CommandA(Receiver.showAtoG);
                break;

            case "1":
                command = new Command1(Receiver.Show1to9);
                break;

            default:
                break;
        }

        // 执行命令
        Invoke invoke = new Invoke(command);
        invoke.Execute();
    }

}

运行结果

心得备注

设计模式需要放到框架设计 才更有意义,有时候如果有一个小的需求并且后期也不会改动,直接用流程的方式写代码更加简单,进一步设计反而没必要!

如果放入项目框架, 命令模式的4个角色还能继续细分,细分后再细分,考虑后期的各种变动,根据策划案进一步细分优化,细节处使用更多的设计模式。

一步步优化下去, 推迟细节再推迟。。直到config配置文件或者Execl。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值