行为型模式(二)命令模式

一句话的概要

将请求封装成对象,支持请求的变化。实现请求者与执行者的解耦操作。

剧情

小明今天很开心,就决定要请客吃饭。让小刚帮忙给酒店订一下餐。

用命令者设计模式,可以分为三块,小明、酒店订餐、小刚。分别封装成对象,则可以完成解耦。

我们下面用命令者模式来构造以上场景。

任务一:创建小刚这个执行者

我们先要创建小刚这个执行者,并且让他有一个订餐的功能。

public class SomeG
    {
        public void OrderMeal()
        {
            Console.WriteLine("好吧,我去订餐");
        }
    }

任务二:创建酒店订餐这个命令

首先我们先搭建抽象类,然后搭建酒店这个子类

//定义命令抽象类
    public abstract class Command
    {
        protected SomeG _SomeG;

        public Command(SomeG g)
        {
            this._SomeG = g;
        }

        public abstract void Tel();
    }

    //定义酒店
    public class Hotel : Command
    {
        public Hotel(SomeG g) : base(g)
        { }

        public override void Tel()
        {
            base._SomeG.OrderMeal();
        }
    }

将命令的构造函数,设置为必须把执行者传进去。然后定义执行方法。

任务三:创建小明这个命令者

最后我们创建小明这个执行命令的人。

public class SomeM
    {
        private Command _command;

        public SomeM(Command com)
        {
            this._command = com;
        }

        public void Go()
        {
            _command.Tel();
        }
    }

任务四:我们串联整个剧情

private static void Main(string[] args)
        {
            Console.WriteLine("小明让小刚去酒店订餐");
            //定义执行者,小刚
            SomeG g = new SomeG();
            //定义命令,订餐
            Command com = new Hotel(g);
            //定义命令者,小明
            SomeM m = new SomeM(com);
            //执行命令
            m.Go();
            Console.ReadLine();
        }

总结

命令模式把操作封装成对象,通过命令的抽象话来达到命令者和执行者的解耦操作。

常用场景:行为的请求者与行为的处理者耦合度过高。

选择关键点:请求者是否不需要关心命令的执行只知道接受者。

时间: 2024-10-25 06:13:31

行为型模式(二)命令模式的相关文章

(15):(行为型模式) Command 命令模式

(15):(行为型模式) Command 命令模式

行为型模式:命令模式

LieBrother原文: 行为型模式:命令模式 十一大行为型模式之三:命令模式. 简介 姓名 :命令模式 英文名 :Command Pattern 价值观 :军令如山 个人介绍 : Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations. 将一个

17行为型模式之命令模式

概念 Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数. 在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例:设置调用参数:调用目标对象的方法. 但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类. 整个调用过程比较繁杂,或者存在多处这种调用.这时,使用Command类对该调用加以封装,便于功能的再利用.- 调用前后需要

vim进入编辑模式 , vim命令模式 ,vim实践

vim 的三种常用模式 一般模式 移动光标位置 删除,复制,粘贴 进入编辑模式 "i" 当前字符前插入 "I" 在光标所在行的行首插入 "a" 在当前字符后插入 "A" 在光标所在行尾插入 "o" 在当前行的下一行插入新的一行 "O" 在当前行的上一行插入新的一行 "Esc键" 退出编辑模式 进入命令模式 退出编辑模式后按":"或者"/&

Java进阶篇设计模式之八 ----- 责任链模式和命令模式

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

Java设计模式之八 ----- 责任链模式和命令模式

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

策略模式Vs命令模式

阅读本篇文章前,你需要对策略模式和命令模式有一定的了解. 策略模式:主要用于封装算法,封装起来的好处就是可是随意替换算法. 命令模式:请求者给一个具体的命令,然后命令到底怎么执行的,执行的流程如何,他无需关心.例如,给我上一盘菜.它只是下了一个命令,然后服务员(接受请求)去叫厨房的师傅炒菜(执行者).整个执行过程,请求者不需要关心,它只需要给出一条命令,自然有人会帮忙处理他的这条指令. 下面我们结合类图分析一下策略模式: 策略模式Vs命令模式

进入编辑模式 vim命令模式 vim实践

进入编辑模式编辑模式,就是我们可以进行修改文档,配置的模式i 在当前字符前插入I(大写) 在光标所在行行首插入a 在当前字符后面插入A(大写) 在所在行行尾插入o 在当前行下面另起一行插入O(大写) 在当前行上面另起一行插入 ·····vim命令模式查找:/加你要查找的字符:·替换:(:1,21s/yang/huang/g)意思为在1-21行里将yang替换为huang(不加g只会替换一行中出现的第一个)·不加g的样子·(:1,$s/yang/huang/g)意思为1-最后一行里将yang替换为

行为型模式之命令模式

概述 在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作.命令模式为此类问题提供了一个较为完美的解决方案. 命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求