Command(命令模式——行为模型)

Command(命令模式——行为模型)_第1张图片
A——>B【A调用B】 将B抽象为对象
Command模式【应用范围较小】
动机

Command(命令模式——行为模型)_第2张图片
意图
Command(命令模式——行为模型)_第3张图片
结构
Command(命令模式——行为模型)_第4张图片
代码
Version01

class Document
{
    public void ShowText()
    {
        //....
    }
}
class Graphics
{
    public void ShowGraphics()
    {
        //....
    }
}
//应用程序主干/高层抽象
public class Application
{
    public void Show()
    {
        Document doc = new Document();
        doc.ShowText();//直接依赖具体行为实现

        Graphics gra = new Graphics();
        gra.ShowGraphics();//直接依赖具体行为实现
    }
}

改进Version2

//已经存在的类,实现细节,底层实现
class Document
{
    public void ShowText()
    {
        //....
    }
}
//实现Command的设计模式——抽象体
interface Command
{
    void Show();
    void Undo();
    void Redo();
}
//具体化命令对象——从抽象意义来讲,DocumentCommand表示一个行为
class DocumentCommand : Command
{
    private Document doc;
    public DocumentCommand(Document doc)
    {
        this.doc = doc;
    }
    public void Show()
    {
        doc.ShowText();
    }
    public void Undo()
    {        
    }
    public void Redo()
    {
    }
}
//应用程序主干/高层抽象 依赖抽象Command
class Application1
{
    Stack<Commanded> stack;
    public void Show()
    {
        foreach (Commanded c in stack)
        {
            c.Execute();
        }
    }
    public void Undo()
    {
        if (canUndo)
        {
            Commanded commanded = stack.Pop();
            commanded.Undo();
            undoList.Add(commanded);
        }
    }
    public void Redo()
    {
        if (canRedo)
        {
            Commanded commanded = undoList.Pop();
            commanded.Redo();
        }
    }
}

要点
Command(命令模式——行为模型)_第5张图片

你可能感兴趣的:(设计模式,命令模式,设计模式)