开发设计模式设计模式之简单工厂模式
Hoshea Zhang思路
工厂模式是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在一个单独的类中的方式。工厂模式通过定义一个公共的接口来创建对象,而不是直接在客户端代码中使用new
关键字来实例化对象。这样做的好处是,客户端代码与具体的产品类解耦,使得代码更加灵活、可扩展和可维护。
工厂模式通常包含以下几个角色:
- 抽象产品(Abstract Product):定义了产品的接口,所有具体产品类都必须实现这个接口。
- 具体产品(Concrete Product):实现了抽象产品接口的具体产品类。
- 工厂(Factory):负责创建产品对象的类,它包含一个创建产品的方法,根据传入的参数或条件来决定创建哪种具体产品。
客户端代码通过调用工厂类的方法来创建产品对象,而不需要直接实例化具体产品类。这样,当需要创建不同类型的产品时,只需要修改工厂类的创建方法,而不需要修改客户端代码。
优点
- 将产品的创建和使用解耦,客户端代码只需要关心产品的接口,而不需要关心具体的产品类。
- 可以通过工厂类的创建方法来集中管理产品的创建逻辑,使得代码更加灵活和可维护。
- 可以通过工厂类来隐藏具体产品的实现细节,提高代码的安全性。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include <iostream> #include <string>
class Product { public: virtual void use() = 0; };
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: static Product* createProduct(const std::string& type) { if (type == "A") { return new ConcreteProductA(); } else if (type == "B") { return new ConcreteProductB(); } return nullptr; } };
int main() { Product* productA = Factory::createProduct("A"); if (productA) { productA->use(); delete productA; }
Product* productB = Factory::createProduct("B"); if (productB) { productB->use(); delete productB; }
return 0; }
|
值得注意的是,工厂类的创建产品的方法一般使用静态函数实现,原因是不需要实例化对象,可以直接通过类名调用,简化代码避免额外开销。