C++之无聊小技巧三

上一篇扯了一点设计模式,本文接着讨论。以下内容仅供娱乐。

先看一个朴实的例子:

struct Widget {};
struct WidgetManager {
  Widget *getWidget() {
    Widget *pw = this->createWidget();
    widgets.push_back(pw);
    return pw;
  }
private:
  virtual Widget *createWidget() { return new Widget; }
  vector<Widget *> widgets;
};
struct Bolt : Widget {};
struct BoltManager : WidgetManager {
  Widget *createWidget() { return new Bolt; }
};

Continue reading C++之无聊小技巧三

C++之无聊小技巧二

接下来扯一点设计模式。一般的业务框架会包含大量的模板方法模式,它的目的主要是为了复用代码。看个简单例子:

struct SessionManager {
  void execute() {
    open();
    run();
    close();
  }
private:
  void open() { cout << "session start" << endl; }
  void close() { cout << "session end" << endl; }
  virtual void run() { cout << "run" << endl; }
};
struct Printer : SessionManager {
  void run() { cout << "print ABC" << endl; }
};
int main() { 
  SessionManager *a = new Printer(); 
  a->execute();
/*
print: 
  session start
  print ABC
  session end
*/
}

Continue reading C++之无聊小技巧二