zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:17.命令模式(Command Pattern)

    五个角色:抽象命令类(Command)、具体命令类(ConcreteCommand)、调用者(Invoker)、接收者(Receiver)、客户端(Client) 

            抽象命令类(Command):声明执行操作的接口

            具体命令类(ConcreteCommand):内部有一个接收者,调用接收者实现操作。

            调用者(Invoker):要求命令执行某个操作

            接收者(Receiver):处理具体的操作

            客户端(Client):设定好三方链接,调用者直接操作即可。

    实现思路:创建一个命令对象,然后设定其接收者,让调用者引用到一个命令对象,最后调用者直接启动操作即可。

    类图:

    应用场景:用户开一台电脑。

    分析:用户(调用者)开电脑时,面对电脑只有一个开关按钮(命令对象),这个开关按钮会让主板(接收者)通电,由主板去做启动电脑的操作。

            下面我们在控制台程序去演示一下如何使用Command Pattern:

            一、抽象命令类(Command):

        //抽象命令者
    public interface ICommand
    {
    void Execute();
    }

            二、具体命令类(ConcreteCommand):

        //具体命令
    public class ConcreteCommand : ICommand
    {
    Receiver receiver;
    public ConcreteCommand(Receiver receiver)
    {
    this.receiver = receiver;
    }
    public void Execute()
    {
    receiver.Operation();
    }
    }

            三、调用者(Invoker):

        //调用者
    public class Invoker
    {
    private ICommand command;
    public Invoker(ICommand command)
    {
    this.command = command;
    }
    public void ExecCommand()
    {
    command.Execute();
    }
    }

            四、接收者(Receiver):

        //接受者
    public class Receiver
    {
    public void Operation()
    {
    Console.WriteLine("Cpu通电");
    Console.WriteLine("内存通电");
    Console.WriteLine("硬盘通电");
    Console.WriteLine("光驱通电");
    }
    }

            五、客户端(Client):

        class Program
    {
    static void Main(string[] args)
    {
    Receiver receciver = new Receiver();
    ICommand cmd = new ConcreteCommand(receciver);
    Invoker user = new Invoker(cmd);
    user.ExecCommand();
    Console.ReadLine();
    }
    }

            如需源码请点击 CommandPattern.rar下载。

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2213429.html
Copyright © 2011-2022 走看看