做网站的空间要多大的,合肥专业做网站建设内容,手机建网站花钱吗,百度一下你就知道官方网站基本概念
工厂模式是一种创建型设计模式#xff0c;用于将对象的创建逻辑与使用者分离#xff0c;以实现对象的创建和使用的解耦。工厂模式提供了一个统一的接口来创建对象#xff0c;而客户端代码只需通过该接口来请求所需的对象#xff0c;而不需要知道具体的对象创建细…基本概念
工厂模式是一种创建型设计模式用于将对象的创建逻辑与使用者分离以实现对象的创建和使用的解耦。工厂模式提供了一个统一的接口来创建对象而客户端代码只需通过该接口来请求所需的对象而不需要知道具体的对象创建细节。
工厂模式的各种部件为
工厂Factory实现了工厂接口负责创建具体产品的对象。产品Product工厂方法创建的具体实例对象。
使用场景 对象创建逻辑复杂可能涉及到配置解析、条件判断等逻辑时。 对象类型不明确对象的具体类型可能在运行时才能确定例如根据用户的输入或配置来决定创建哪种对象时。 需要隐藏对象创建细节只暴露一个统一的接口给客户端使用时。 需要扩展对象创建如果需要向系统中添加新的产品类而不影响现有代码时。 需要创建的对象具有共同的接口时。
实现
例子
假设我们有一个形状Shape的抽象基类以及两个具体的形状类圆形Circle和矩形Rectangle。创建一个形状工厂ShapeFactory
// 抽象基类 Shape
class Shape {
public:virtual void draw() 0;virtual ~Shape() {}
};// 具体类 Circle
class Circle : public Shape {
public:void draw() override {std::cout Drawing Circle std::endl;}
};// 具体类 Rectangle
class Rectangle : public Shape {
public:void draw() override {std::cout Drawing Rectangle std::endl;}
};// 形状工厂类 ShapeFactory
class ShapeFactory {
public:// 根据类型创建相应的形状对象static Shape* createShape(const std::string type) {if (type Circle) {return new Circle();} else if (type Rectangle) {return new Rectangle();}return nullptr;}
};int main() {// 使用工厂创建不同类型的形状对象Shape* circle ShapeFactory::createShape(Circle);Shape* rectangle ShapeFactory::createShape(Rectangle);return 0;
}
QObject 工厂
继承了QObject的类可以通过 Q_INVOKABLE 和 QMetaObject::newInstance 来实现工厂模式需要把产品类的构造函数声明为Q_INVOKABLE并调用QObject::staticMetaObject.newInstance()函数。 class Product : public QObject
{Q_OBJECT
public:Q_INVOKABLE explicit Product(QObject *parent nullptr);
};int main(){QObject *object Product::staticMetaObject.newInstance();}
单例模式
单例模式也可以看成是工厂模式的一种实现其隐藏了创建对象的细节确保在程序中类只有一个实例。
QT设计模式单例模式