0
点赞
收藏
分享

微信扫一扫

jQuery id选择器无效

小黑Neo 2023-05-10 阅读 76
// 简单工厂模式
#include <iostream>
#include <string>

// 抽象产品类
class Product {
public:
    virtual ~Product() {}
    virtual std::string getName() = 0;
};

// 具体产品类A
class ProductA : public Product {
public:
    std::string getName() {
        return "ProductA";
    }
};

// 具体产品类B
class ProductB : public Product {
public:
    std::string getName() {
        return "ProductB";
    }
};

// 工厂类
class Factory {
public:
    static Product* createProduct(std::string name) {
        if (name == "A") {
            return new ProductA();
        }
        else if (name == "B") {
            return new ProductB();
        }
        else {
            return nullptr;
        }
    }
};

int main() {
    Product* product = Factory::createProduct("A");
    if (product != nullptr) {
        std::cout << "Product name: " << product->getName() << std::endl;
        delete product;
    }
    else {
        std::cout << "Invalid product name" << std::endl;
    }
    return 0;
}

// 工厂方法模式

// 抽象产品类
class Product {
public:
    virtual ~Product() {}
    virtual std::string getName() = 0;
};

// 具体产品类A
class ProductA : public Product {
public:
    std::string getName() {
        return "ProductA";
    }
};

// 具体产品类B
class ProductB : public Product {
public:
    std::string getName() {
        return "ProductB";
    }
};

// 抽象工厂类
class Factory {
public:
    virtual Product* createProduct() = 0;
};

// 具体工厂类A
class FactoryA : public Factory {
public:
    Product* createProduct() {
        return new ProductA();
    }
};

// 具体工厂类B
class FactoryB : public Factory {
public:
    Product* createProduct() {
        return new ProductB();
    }
};

// 客户端代码
int main() {
    Factory* factory = new FactoryA();
    Product* product = factory->createProduct();
    std::cout << "Product name: " << product->getName() << std::endl;
    delete product;
    delete factory;
    return 0;
}
/*
在简单工厂模式中,工厂类Factory负责创建具体产品对象ProductA和ProductB,并根据传入的产品名称参数调用相应的构造函数。客户端代码只需要调用工厂类的静态方法createProduct即可得到所需的产品对象。

在工厂方法模式中,抽象工厂类Factory定义了创建产品对象的接口createProduct,具体的产品对象由具体工厂类FactoryA和FactoryB来创建。客户端代码需要通过实例化具体工厂类来得到所需的产品对象。

两种模式的区别在于工厂类的职责:简单工厂模式中工厂类负责所有产品对象的创建,而工厂方法模式中每个具体工厂类只负责创建一种产品对象。
*/

简单工厂的计算机样例:

 

工厂方法的计算器样例

 

 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

 简单工厂:

1 、它是一个具体的类,非接口 抽象类。有一个重要的create()方法,利用if或者switch创建产品并返回。

2 、create()方法通常是静态的,所以也称之为静态工厂。

工厂方法模式描述:

提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。

提供一个产品类的接口。产品类均要实现这个接口(也可以是abstract类,即抽象产品)。

提供一个工厂类的接口。工厂类均要实现这个接口(即抽象工厂)。

由工厂实现类创建产品类的实例。工厂实现类应有一个方法,用来实例化产品类

工厂方法克服了简单工厂违背开放-封闭原则的缺点

举报

相关推荐

0 条评论