• 设计模式-命令模式


    命令模式这个设计模式更像是对接口编程的一种应用,比如给小朋友穿衣服,但是不一样的衣服有不一样的穿法,裤子,衬衫,鞋,T恤都是不一样的,但是小朋友不知道怎么穿,只知道想穿什么,那么怎么办呢,小朋友会让他的妈妈帮他穿,这里面的“让妈妈帮忙”,就是给妈妈一个命令(虽然不是很恰当- -!),对小朋友而言,怎么穿他并不关心,反正只要有只要让妈妈穿就行了,所以我们只要定义一个穿的接口就行

    public interface Wear()
    {
        public void excute();
    }

    然后继承这个穿,有很多种执行方式,比如穿鞋,穿衬衫,穿裤子

    public class WearShoe implements Wear{
        public void excute()
        {
            .....//穿鞋的动作    
        }
    }
    public class WearShirt implements Wear{
        public void excute()
        {
            .....//穿衬衫的动作    
        }
    }
    public class WearPants implements Wear{
        public void excute()
        {
            .....//穿裤子的动作    
        }
    }

    对于妈妈来说,只要知道小朋友要穿什么,帮他穿上就好了:

    public class Mom{
        Wear wear;
        public setCommand(Wear wear)
        {
            this.wear = wear;
        }
        public void Do()
        {
            wear.excute();
        }
    }

    小朋友要做的事就是告诉妈妈我想穿什么,让妈妈帮它穿好就行了,具体怎么穿,他才不管呢

    public class Child{
        public static void main()
        {
            Mom mom=new Mom();
            WearShoe wearShoe=new WearShoe();
            WearPants wearPants=new WearPants();
            mom.setCommand(wearShoe);
            mom.excute();
            mom.setCommand(wearPants);
            mom.excute();    
        }
    }

    所以可以看出命令模式其实就是:

    命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作

    其中可撤销的操作其实就是在接口中加入脱衣服的接口,这样子既可以帮小朋友穿衣服也可以帮他脱掉衣服:

    public interface Wear()
    {
        public void excute();
        public void undo();
    }

    然后再实现接口的对象中实现它就可以了。

    命令模式在多线程处理任务的时候非常有效,只要将命令封装的对象,放入任务队列中,不同的线程通过队列获取对象,直接执行对象的excute()方法就行,而不用管具体命令是怎么执行的。

  • 相关阅读:
    AddTransient、AddSingleton、AddScoped的区别
    ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
    DotNetCore 结合 Nginx 将网站部署到阿里云
    centos7安装配置mysql8
    centos7安装nginx
    ASP.NET Core搭建多层网站架构【0-前言】
    .Net Core3.0 WebApi 二:API 文档神器 Swagger
    .Net Core3.0 WebApi 三:读取appsettings.json
    .Net Core3.0 WebApi 四:JWT权限验证
    vue动态配置参数,避免重复打包
  • 原文地址:https://www.cnblogs.com/xtestw/p/3953494.html
Copyright © 2020-2023  润新知