02_23 抽象工厂模式的设计模式
最编程
2024-10-09 20:39:47
...
// 抽象产品A
class AbstractProductA {
public:
virtual void Use() = 0;
};
// 具体产品A1
class ConcreteProductA1 : public AbstractProductA {
public:
void Use() override {
std::cout << "Using A1" << std::endl;
}
};
// 具体产品A2
class ConcreteProductA2 : public AbstractProductA {
public:
void Use() override {
std::cout << "Using A2" << std::endl;
}
};
// 抽象产品B
class AbstractProductB {
public:
virtual void Use() = 0;
};
// 具体产品B1
class ConcreteProductB1 : public AbstractProductB {
public:
void Use() override {
std::cout << "Using B1" << std::endl;
}
};
// 具体产品B2
class ConcreteProductB2 : public AbstractProductB {
public:
void Use() override {
std::cout << "Using B2" << std::endl;
}
};
// 抽象工厂
class AbstractFactory {
public:
virtual AbstractProductA* CreateProductA() = 0;
virtual AbstractProductB* CreateProductB() = 0;
};
// 具体工厂1
class ConcreteFactory1 : public AbstractFactory {
public:
AbstractProductA* CreateProductA() override {
return new ConcreteProductA1();
}
AbstractProductB* CreateProductB() override {
return new ConcreteProductB1();
}
};
// 具体工厂2
class ConcreteFactory2 : public AbstractFactory {
public:
AbstractProductA* CreateProductA() override {
return new ConcreteProductA2();
}
AbstractProductB* CreateProductB() override {
return new ConcreteProductB2();
}
};
// 客户端代码
int main() {
AbstractFactory* factory = new ConcreteFactory1();
AbstractProductA* productA = factory->CreateProductA();
AbstractProductB* productB = factory->CreateProductB();
productA->Use();
productB->Use();
delete productA;
delete productB;
delete factory;
return 0;
}