diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..774bf3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +bin +.vscode +a.out diff --git a/01_simple_factory.cpp b/01_simple_factory.cpp new file mode 100644 index 0000000..0ef5cc6 --- /dev/null +++ b/01_simple_factory.cpp @@ -0,0 +1,44 @@ +#include +#include + +using namespace std; + +class Shape { +public: + virtual void draw() = 0; +}; + +class Circle : public Shape { +public: + virtual void draw() override { + cout << "Circle draw" << endl; + } +}; + +class Square : public Shape { +public: + virtual void draw() override { + cout << "Square draw" << endl; + } +}; + +class Factory { +public: + unique_ptr generate(const string& s) { + if (s == "circle") { + return make_unique(); + } else if (s == "square") { + return make_unique(); + } + + return nullptr; + } +}; + +int main() { + Factory f; + unique_ptr s = f.generate("circle"); + s->draw(); + s = f.generate("square"); + s->draw(); +} diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..f5142e8 --- /dev/null +++ b/notes.md @@ -0,0 +1,5 @@ +# 设计模式笔记 + +## 简单工厂(simple factory) + +简单工厂将对象的创建过程与使用过程解耦,客户端只需传入参数,而不需要关心创建的细节和具体的子类类型。这样,当需要添加新的产品子类时,只需在工厂中扩展创建逻辑,无需修改客户端代码,从而实现了对变化的封装,提升了系统的可扩展性与可维护性。