设计模式——命令模式(command)

组件构建构成中,组件行为的变化经常导致组件本身剧烈的变化;“行为变化”将组件本身和组件行为解耦,从而支持组件行为变化。

command,visitor属于行为变化模式。

motivation:软件构件过程中,“行为请求者”和“行为执行者”常常呈现出紧耦合;在某些场合——例如记录、撤销/重做,事务等处理时,这种无法抵御变化的紧耦合时不适应软件发展的;将一个请求(行为)进行对象化,从而可以使用不同的请求对客户进行参数化。

key interface or class:

        1. command接口。

feature: 行为进行对象化。

structure:

设计模式——命令模式(command)_第1张图片

template codes:

class Command{
public:
    virtual excute()=0;
};

//实现不同的command,或者宏命令
class concreteCommand1: public Command{
public:
    excute() override{
        //...
    }
};
class concreteCommand1: public Command{
public:
    excute() override{
        //...
    }
}


summary:

1. command根本目的在于将“行为请求者”和“行为实现着”进行解耦,常见手段时将行为对象化;

2.concreteCommand可能根据需要保存一些额外的状态信息;

3.command模式和函数指针有点类似,但是两者在定义行为接口上有所区别:command通过“接口-实现”来定义行为接口规范,严格但是由性能损失;函数指针以函数签名来定义接口规范,更灵活性能更高;

4. 在其他语言,如java,c#等中应用更加广泛,因为c++泛型编程(设计模式弥补语言缺陷)。

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