简单工厂、工厂方法和抽象工厂模式(创建型设计模式)的 C++ 代码示例模板。
结构
核心
代码
#include
#include
#include
using std::cerr;
using std::cout;
using std::endl;
using std::make_unique;
using std::string;
using std::unique_ptr;
// 抽象产品类
class AbstractProduct
{
public:
AbstractProduct() = default;
virtual ~AbstractProduct() = default;
virtual void func() = 0;
};
// 具体产品类 A
class ConcreteProductA : public AbstractProduct
{
public:
ConcreteProductA() = default;
~ConcreteProductA() override = default;
void func() override
{
cout << "ConcreteProductA" << endl;
}
};
// 具体产品类 B
class ConcreteProductB : public AbstractProduct
{
public:
ConcreteProductB() = default;
~ConcreteProductB() override = default;
void func() override
{
cout << "ConcreteProductB" << endl;
}
};
// 简单工厂类
class SimpleFactory
{
public:
// 静态方法依据类型创建不同的具体产品
static unique_ptr<AbstractProduct> create_concrete_product(const string &concrete_product_type)
{
if (concrete_product_type == "A")
{
return make_unique<ConcreteProductA>();
}
else if (concrete_product_type == "B")
{
return make_unique<ConcreteProductB>();
}
else
{
cerr << "Unknown type of concrete product" << endl;
return nullptr;
}
}
};
// 客户端
int main()
{
// 使用简单工厂创建不同类型的具体产品
unique_ptr<AbstractProduct> concrete_product_a = SimpleFactory::create_concrete_product("A"); // 创建具体产品对象 A
if (concrete_product_a != nullptr)
{
concrete_product_a->func();
}
unique_ptr<AbstractProduct> concrete_product_b = SimpleFactory::create_concrete_product("B"); // 创建具体产品对象 B
if (concrete_product_b != nullptr)
{
concrete_product_b->func();
}
unique_ptr<AbstractProduct> concrete_product_c = SimpleFactory::create_concrete_product("C"); // 创建具体产品对象 C
if (concrete_product_c != nullptr)
{
concrete_product_c->func();
}
return 0;
}
/*
输出:
ConcreteProductA
ConcreteProductB
Unknown type of concrete product
*/
结构
核心
代码
#include
#include
using std::cout;
using std::endl;
using std::make_unique;
using std::unique_ptr;
// 抽象产品类
class AbstractProduct
{
public:
AbstractProduct() = default;
virtual ~AbstractProduct() = default;
virtual void func() = 0;
};
// 具体产品类 A
class ConcreteProductA : public AbstractProduct
{
public:
ConcreteProductA() = default;
~ConcreteProductA() override = default;
void func() override
{
cout << "ConcreteProductA" << endl;
}
};
// 具体产品类 B
class ConcreteProductB : public AbstractProduct
{
public:
ConcreteProductB() = default;
~ConcreteProductB() override = default;
void func() override
{
cout << "ConcreteProductB" << endl;
}
};
// 抽象工厂类
class AbstractFactory
{
public:
AbstractFactory() = default;
virtual ~AbstractFactory() = default;
virtual unique_ptr<AbstractProduct> create_concrete_product() const = 0;
};
// 具体工厂类 A
class ConcreteFactoryA : public AbstractFactory
{
public:
ConcreteFactoryA() = default;
~ConcreteFactoryA() override = default;
inline unique_ptr<AbstractProduct> create_concrete_product() const override
{
return make_unique<ConcreteProductA>();
}
};
// 具体工厂类 B
class ConcreteFactoryB : public AbstractFactory
{
public:
ConcreteFactoryB() = default;
~ConcreteFactoryB() override = default;
inline unique_ptr<AbstractProduct> create_concrete_product() const override
{
return make_unique<ConcreteProductB>();
}
};
// 客户端
int main()
{
// 使用工厂方法创建不同类型的具体产品
unique_ptr<AbstractFactory> concrete_factory_a = make_unique<ConcreteFactoryA>(); // 创建具体工厂对象 A
unique_ptr<AbstractProduct> concrete_product_a = concrete_factory_a->create_concrete_product(); // 创建具体产品对象 A
concrete_product_a->func();
unique_ptr<AbstractFactory> concrete_factory_b = make_unique<ConcreteFactoryB>(); // 创建具体工厂对象 B
unique_ptr<AbstractProduct> concrete_product_b = concrete_factory_b->create_concrete_product(); // 创建具体产品对象 B
concrete_product_b->func();
return 0;
}
/*
输出:
ConcreteProductA
ConcreteProductB
*/
结构
核心
代码
#include
#include
using std::cout;
using std::endl;
using std::make_unique;
using std::unique_ptr;
// 抽象产品类 A
class AbstractProductA
{
public:
AbstractProductA() = default;
virtual ~AbstractProductA() = default;
virtual void func() = 0;
};
// 具体产品类 A1
class ConcreteProductA1 : public AbstractProductA
{
public:
ConcreteProductA1() = default;
~ConcreteProductA1() override = default;
void func() override
{
cout << "ConcreteProductA1" << endl;
}
};
// 具体产品类 A2
class ConcreteProductA2 : public AbstractProductA
{
public:
ConcreteProductA2() = default;
~ConcreteProductA2() override = default;
void func() override
{
cout << "ConcreteProductA2" << endl;
}
};
// 抽象产品类 B
class AbstractProductB
{
public:
AbstractProductB() = default;
virtual ~AbstractProductB() = default;
virtual void func() = 0;
};
// 具体产品类 B1
class ConcreteProductB1 : public AbstractProductB
{
public:
ConcreteProductB1() = default;
~ConcreteProductB1() override = default;
void func() override
{
cout << "ConcreteProductB1" << endl;
}
};
// 具体产品类 B2
class ConcreteProductB2 : public AbstractProductB
{
public:
ConcreteProductB2() = default;
~ConcreteProductB2() override = default;
void func() override
{
cout << "ConcreteProductB2" << endl;
}
};
// 抽象工厂类
class AbstractFactory
{
public:
AbstractFactory() = default;
virtual ~AbstractFactory() = default;
virtual unique_ptr<AbstractProductA> create_product_a() const = 0;
virtual unique_ptr<AbstractProductB> create_product_b() const = 0;
};
// 具体工厂类 1
class ConcreteFactory1 : public AbstractFactory
{
public:
ConcreteFactory1() = default;
virtual ~ConcreteFactory1() = default;
inline unique_ptr<AbstractProductA> create_product_a() const override
{
return make_unique<ConcreteProductA1>();
}
inline unique_ptr<AbstractProductB> create_product_b() const override
{
return make_unique<ConcreteProductB1>();
}
};
// 具体工厂类 2
class ConcreteFactory2 : public AbstractFactory
{
public:
ConcreteFactory2() = default;
virtual ~ConcreteFactory2() = default;
inline unique_ptr<AbstractProductA> create_product_a() const override
{
return make_unique<ConcreteProductA2>();
}
inline unique_ptr<AbstractProductB> create_product_b() const override
{
return make_unique<ConcreteProductB2>();
}
};
// 客户端
int main()
{
// 使用抽象工厂创建不同类型的具体产品
unique_ptr<AbstractFactory> concrete_factory_1 = make_unique<ConcreteFactory1>(); // 创建具体工厂对象1
unique_ptr<AbstractProductA> concrete_product_a1 = concrete_factory_1->create_product_a(); // 创建具体产品对象 A1
unique_ptr<AbstractProductB> concrete_product_b1 = concrete_factory_1->create_product_b(); // 创建具体产品对象 B1
concrete_product_a1->func();
concrete_product_b1->func();
unique_ptr<AbstractFactory> concrete_factory_2 = make_unique<ConcreteFactory2>(); // 创建具体工厂2
unique_ptr<AbstractProductA> concrete_product_a2 = concrete_factory_2->create_product_a(); // 创建具体产品对象 B1
unique_ptr<AbstractProductB> concrete_product_b2 = concrete_factory_2->create_product_b(); // 创建具体产品对象 B1
concrete_product_a2->func();
concrete_product_b2->func();
return 0;
}
/*
输出:
ConcreteProductA1
ConcreteProductB1
ConcreteProductA2
ConcreteProductB2
*/
简单工厂、工厂方法和抽象工厂模式(创建型设计模式)的 C++ 代码示例模板。