跳转至

设计模式

单例模式 Singleton

一个线程里只保留一个实例,第一次调用时初始化,之后调用只返回指针


策略模式 Strategy

对于解决同样问题的不同方法,定义一个策略基类Strategy,将不同的算法实现为其派生类,然后客户端 (Context)类可以持有Strategy类的指针即可,使用不同方法时将指针和不同派生类绑定即可

注意这里基类里的执行函数exec定义成纯虚函数比较合适

class Strategy {
public:
    virtual ~Strategy(){}
    virtual void exec() = 0;
};
class StrategyA : public Strategy {
public:
    void exec() { cout << "StrategyA::exec()" << endl; }
};
class StrategyB : public Strategy {
public:
    void exec() { cout << "StrategyB::exec()" << endl; }
};
class Context {
public:
    explicit Context(Strategy* strategy) : _strategy(strategy) {}
    void set_strategy(Strategy* strategy) { _strategy = strategy; }
    void exec() { _strategy->exec(); }
private:
    Strategy* _strategy;    
};

工厂模式 Factory

即工厂生产多种产品,那么创建一个工厂的基类,创建不同产品的基类,然后派生出具体的产品,再派生出具体的工厂,生产具体的产品类,可以随意的组合产品,从M\times N变为M+N

参考