1、工厂模式
1.1、简单工厂模式(Simple Factory Pattern)
简单工厂模式并不是GoF(Gang of Four)提出的设计模式之一,但它是工厂模式的一种简单形式,通常用来创建同一层次的对象。在简单工厂模式中,一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。
// 简单工厂示例
class Product {
public:
virtual void use() = 0;
virtual ~Product() {
}
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductA" << std::endl;
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductB" << std::endl;
}
};
class SimpleFactory {
public:
Product* createProduct(char type) {
switch (type) {
case 'A':
return new ConcreteProductA();
case 'B':
return new ConcreteProductB();
default:
return nullptr;
}
}
};
int main() {
SimpleFactory factory;
Product* productA = factory.createProduct('A');
if (productA)
productA->use();
Product* productB = factory.createProduct('B');
if (productB)
productB->use();
delete productA;
delete productB;
return 0;
}
1.2、工厂方法模式(Factory Method Pattern)
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。换句话说,工厂方法模式将对象的实例化延迟到子类。
// 工厂方法模式示例
class Product {
public:
virtual void use() = 0;
virtual ~Product() {
}
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductA" << std::endl;
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductB" << std::endl;
}
};
class Factory {
public:
virtual Product* createProduct() = 0;
virtual ~Factory() {
}
};
class ConcreteFactoryA : public Factory {
public:
Product* createProduct() override {
return new ConcreteProductA();
}
};
class ConcreteFactoryB :