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家外包可以干活,你选吧!