设计模式
单例模式 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