棋牌游戏网站怎么做的,郑州有没有厉害的seo顾问,管理平台,网站建设与部署阿里云大学定义
工厂设计模式是一种创建型设计模式#xff0c;它提供了一个用于创建对象的接口#xff0c;但允许子类决定实例化哪个类。这种设计模式使一个类的实例化延迟到其子类。
实现举例
#include iostream
#include string// 抽象产品类
class Product {
pub…定义
工厂设计模式是一种创建型设计模式它提供了一个用于创建对象的接口但允许子类决定实例化哪个类。这种设计模式使一个类的实例化延迟到其子类。
实现举例
#include iostream
#include string// 抽象产品类
class Product {
public:virtual void use() 0;
};// 具体产品类A
class ConcreteProductA : public Product {
public:void use() override {std::cout Im using product A! std::endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void use() override {std::cout Im using product B! std::endl;}
};// 工厂类
class Factory {
public:virtual Product* createProduct(std::string type) 0;
};// 具体工厂类A
class ConcreteFactoryA : public Factory {
public:ConcreteProductA* createProduct(std::string type) override {if (type A) {return new ConcreteProductA();} else {return nullptr;}}
};// 具体工厂类B
class ConcreteFactoryB : public Factory {
public:ConcreteProductB* createProduct(std::string type) override {if (type B) {return new ConcreteProductB();} else {return nullptr;}}
};int main() {// 使用具体工厂类A创建产品AConcreteFactoryA* factoryA new ConcreteFactoryA();ConcreteProductA* productA dynamic_castConcreteProductA*(factoryA-createProduct(A));if (productA ! nullptr) {productA-use();delete productA; // 不要忘记删除产品对象} else {std::cout Failed to create product A. std::endl;}delete factoryA; // 不要忘记删除工厂对象// 使用具体工厂类B创建产品BConcreteFactoryB* factoryB new ConcreteFactoryB();ConcreteProductB* productB dynamic_castConcreteProductB*(factoryB-createProduct(B));if (productB ! nullptr) {productB-use();delete productB; // 不要忘记删除产品对象} else {std::cout Failed to create product B. std::endl;}delete factoryB; // 不要忘记删除工厂对象return 0;
}总结
工厂设计模式具有以下特性
封装性产品的实例化被封装在工厂类中这可以避免产品被修改从而保证产品的一致性。扩展性增加新产品时只需增加一个工厂子类不会违反开闭原则。解耦使用者只需要知道自己需要什么产品而不需要关心产品具体的特性从而降低了模块间的耦合。
请注意工厂设计模式也存在一些缺点例如代码量可能会比较大而且不利于扩展复杂的产品结构。