// 简单工厂模式
#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类,即抽象产品)。
提供一个工厂类的接口。工厂类均要实现这个接口(即抽象工厂)。
由工厂实现类创建产品类的实例。工厂实现类应有一个方法,用来实例化产品类
工厂方法克服了简单工厂违背开放-封闭原则的缺点