C++设计模式

创建型(Creational Pattern)

单例模式

class Singleton
{
public:
	static Singleton& instance()
	{
                // c++11 起
		static Singleton ins{};
		return ins;
	}

private:
	Singleton() = default;
	Singleton(const Singleton&) = delete;
	Singleton& operator=(const Singleton&) = delete;
};

工厂模式

结构组成

  • 抽象工厂类: 提供创建产品的接口
  • 具体工厂类: 提供创建产品的实现
  • 抽象产品类: 提供产品的抽象
  • 具体产品类: 提供具体的产品功能
// 抽象产品类
class IProduct
{
public:
	virtual ~IProduct() = default;
	virtual void use() = 0;
};
// 抽象工厂类
class IFactory
{
public:
	virtual ~IFactory() = default;
	virtual void registerProduct(IProduct* product) = 0;
	virtual IProduct* createProduct(const std::string& owner) = 0;
	virtual IProduct* create(const std::string& owner) 
	{
		auto pro = createProduct(owner);
		registerProduct(pro);
		return pro;
	}
};
// 具体产品类
class Card : public IProduct
{
public:
	Card(const std::string& owner) : m_owner(owner) {}
	virtual void use() override
	{
		std::cout << "use card with " << m_owner << "\n";
	}
private:
	std::string m_owner;
};
// 具体工厂类
class CardFactory : public IFactory
{
public:
	virtual void registerProduct(IProduct* product) override
	{
		m_products.push_back(product);
	}
	virtual IProduct* createProduct(const std::string& owner) override
	{
		return new Card(owner);
	}
private:
	std::vector<IProduct*> m_products;
};

抽象工厂模式

个人感觉和工厂模式没什么区别,无非是更抽象了,说了好像又没说...
比如原来是一个工厂创建一个产品,现在我们一个工厂创建多个产品
比如原来产品A只能由工厂A创建,现在产品A 工厂A\B\C 都能创建,相当于你开了公司,计划卖产品A,这时有3家外包可以干活,你选吧!

建造者模式

原型模式

结构型(Structural Pattern)

适配器模式

装饰者模式

代理模式

外观模式

桥接模式

组合模式

享元模式

行为型(Behavioral Pattern)

策略模式

模板方法模式

观察者模式

迭代器模式

责任链模式

命令模式

备忘录模式

状态模式

访问者模式

中介者模式

解释器模式

posted @ 2022-11-11 15:47  miyanyan  阅读(17)  评论(0编辑  收藏  举报