再看设计模式——命令模式

命令模式Command本质就是一个对象化的回调函数。

class Commands
{
public:
    Commands(Actor& actor)
    virtual void execute() = 0;
    virtual void undo() = 0;
}

通常命令的发送者和命令执行者有不同的生命周期,这也是回调函数经常会面临的问题,因此才需要设计这个模式来解耦。这个模式可以跟策略模式或状态模式一起用来保证状态和行为的可扩展性。

C++可以使用仿函数来实现命令模式

template <typename ResultType>
class Functor
{
public:
    ResultType operator();
private:
    // impl
};

template<typename R, class TList>
class FunctorImpl;
template<typename R, class P1, class P2>
class FunctorImpl <R, TYPELIST_2<P1, P2>>;
// virtual R operator(P1, P2) = 0;
template<typename R, class TList>
class Functor
{
public:
    Functor();
    explicit Functor(std::unique_ptr<IMPL> spImpl);
private:
    typedef FunctorImpl<R, TList> IMPL;
    std::unique_ptr<IMPL> spImpl;
};

命令发送了并不是立即执行,通常会加入一个undo方法来支持撤销命令。

本文是全系列中第1 / 7篇:再看设计模式

打赏作者
提交看法

抢沙发

还没有评论,你可以来抢沙发