编辑
2025-09-30
设计模式
00
请注意,本文编写于 80 天前,最后修改于 79 天前,其中某些信息可能已经过时。

目录

创造型设计模式
单例模式
原型模式
工厂方法模式
抽象工厂模式
简单工厂模式
建造者模式

创造型设计模式

通常用于隐藏类的实现细节,或者提供便捷的类创造服务.

单例模式

在某些情况下,软件会遇到贯穿其生命周期始终的对象,这时候,我们需要通过合适的方法,去保证在每一个时刻,最多存在一个这个类的实例:

cpp
#pragma once #include <memory> #include <vector> namespace Singleton { class GameManager{ private: GameManager() {} GameManager(const GameManager&) = delete; GameManager& operator=(const GameManager&) = delete; public: static ::std::shared_ptr<GameManager> getInstance() { static ::std::shared_ptr<GameManager> instance(new GameManager()); return instance; } } }

原型模式

有时,我们希望某些类可以通过自身来构造新的类,所以我们以它为原型,创建一个新的类

cpp
#pragma once #include <memory> #include <vector> namespace CanCopy { struct copyable { virtual ::std::shared_ptr<copyable> clone() const = 0; virtual ~copyable() = default; }; class Map : public copyable { public: virtual ::std::shared_ptr<copyable> clone() const override { return ::std::make_shared<Map>(*this); } }; }

工厂方法模式

对于一系列相同的类的创建,我们不希望在每一个地方显式的写出构造函数,而是希望将其委托给第三方来做,这样做的好处在于: 如果之后遇到修改类的构造函数的情况,我们可以只在Factory一个地方给出修改,而不用修改多处代码.

cpp
#pragma once #include <iostream> #include <memory> namespace Factory { class Product { }; class ProductA : public Product { }; class CreateProductFactory { public: virtual std::shared_ptr<Product> createProduct() = 0; }; class CreateProductAFactory:public CreateProductFactory { public: virtual std::shared_ptr<Product> createProduct() override { return std::make_shared<ProductA>(); } }; }

UML设计如下:

屏幕截图 2025-09-30 213033.png

抽象工厂模式

类似于工厂方法模式,其实就是一个工厂生产一种对象变成一个工厂生产多种对象,类比于上面的话,相当于合并ProductAFactory和ProductBFactory,同时将这几个method抽象成接口给到CreateFactory

简单工厂模式

由于一个工厂能够生产的东西越来越多,给客户(包括程序员)带来了较大的理解负担,所以希望能够在Factory中增加一个"前台",这个前台获取用户的要求,然后通知工人生产对应的"产品".

建造者模式

在快速变化的系统中,如果我们预估,一个类如果经常会进行修改的话,那么经常修改构造函数是个比较危险的行为,因为一个好的系统应该对扩展开放,而对修改封闭. 为了能够解决这个问题,我们可以将类型的构造分离,每一步都是在对这个对象进行安装,最后形成一个整体.

本文作者:barrenham

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!