[设计]命令模式

来源:互联网 发布:用淘宝联盟赚钱安全吗 编辑:程序博客网 时间:2024/06/08 10:34

[设计]命令模式

场景

  • 要保存数据到文件。但是服务提示的接口有顺序的要求
    那就 一个挨着一个的调用呗,正确,可是在应用中多线程的情况下,乱的给那什么啊?什么,麻绳。

解决办法

  • 传之前排好顺序一下传过去。
  • 当然如果有问题不是加一层可以解决的,那就加两层这个小问题应该加一层就可以了。让命令的发出者的执行者分开。
  • 让命令类,发生类,执行类都有自己的抽象类,抽象更稳定,此处只抽了命令,以做演示。
    1. 我们先创建一个执行者的类也就是接收命令干活的类。此处不做抽象,看具体问题和环境。设计模式是死的,用的人是活的。
public class ServerReceiver    {       public void SaveData()        {            Console.WriteLine("服务保存数据到SqL");        }    }
  1. 创建一个命令的基类
 public abstract  class CommandBase    {        protected ServerReceiver SR;        public CommandBase(ServerReceiver sr)        {            SR = sr;        }        public abstract void ActionCommand();    }
  1. 创建一个具体的保存命令子类
 class SaveCommand : CommandBase    {        public SaveCommand(ServerReceiver sr):base(sr)        {        }        public override void ActionCommand()        {            SR.SaveData();        }    }
  1. 创建一个命令发出类
 class CommandInvoke    {        private CommandBase CD;        public CommandInvoke(CommandBase cb)        {            CD = cb;        }        public void DoCommand()        {            CD.ActionCommand();        }    }
  1. 我们可以这样用
 static void Main(string[] args)        {            ServerReceiver sr = new ServerReceiver();            CommandBase cb = new SaveCommand(sr);            CommandInvoke ci = new CommandInvoke(cb);            ci.DoCommand();            Console.Read();        }

类图

  • 占坑

注意

  1. 这样可以更好的让命令有序,
  2. 可以执行uodo和redo的功能,想想怎么弄,我们可以把命令对象缓存起来啊,这样如果不成功我们redo一下
  3. 扩展容易这是共同的好处了吧
  4. 其实我们可以用命令来实现回调的
    源码
    原文地址

功能实快的快分为真快和假快,一分实现了第二次维护要一天,三次一周….;还有一种10分钟实现了第二次维护也是十分钟三次还是十分钟。那种更好呢?肯定第二种,现实生活中第一种好像活的也不错有可能比第二种还要好呢啊哈哈。

原创粉丝点击