您的位置:首页 > 游戏 > 手游 > 郑州手机软件开发公司_武汉科技职业学院有哪些专业_html网页模板_软文代写发布网络

郑州手机软件开发公司_武汉科技职业学院有哪些专业_html网页模板_软文代写发布网络

2025/1/15 23:32:51 来源:https://blog.csdn.net/qq_45297613/article/details/144960950  浏览:    关键词:郑州手机软件开发公司_武汉科技职业学院有哪些专业_html网页模板_软文代写发布网络
郑州手机软件开发公司_武汉科技职业学院有哪些专业_html网页模板_软文代写发布网络

C++二十三种设计模式之抽象工厂模式

  • 一、组成
  • 二、特点
  • 三、目的
  • 四、缺点
  • 五、示例代码

一、组成

抽象产品类:声明产品功能公共接口。
具体产品类:实现产品功能接口。
抽象工厂类:声明创建一组具体产品公共接口。
具体工厂类:实现创建一组具体产品接口。

二、特点

1、抽象工厂创建具体产品接口返回抽象产品类型。
2、一个具体工厂创建一组特定风格产品。

三、目的

无需指定具体类的情况下,为一组相互依赖的对象提供创建接口。

四、缺点

1、违反开闭原则,新增产品类需要改动原有的工厂类。
2、场景限制问题,通常用于创建一组相互依赖的对象,意味着不适合于高度灵活的场景。

五、示例代码

#include<iostream>
#include <vector>
#include <string>
#include <mutex>using namespace std;class Shape;//抽象产品类
class Rectangle;//具体产品类
class Circle;//具体产品类
class Color;//抽象产品类
class Red;//具体产品类
class Blue;//具体产品类
class AbstractFactory;//抽象工厂类
class ConcreteFactory;//具体工厂类
class ConcreteFactory2;//具体工厂类class Shape {
public:virtual ~Shape() {}virtual void draw() = 0;
};class Rectangle:public Shape {public:~Rectangle() {}void draw() {cout << "Drawing a Rectangle" << endl;}
};class Circle :public Shape {public:~Circle() {}void draw() {cout << "Drawing a Circle" << endl;}
};class Color {
public:virtual ~Color() {};virtual void fill() = 0;
};class Red : public Color{
public:~Red() {}void fill() {cout << "Filling with Red Color" << endl;}
};class Blue : public Color {
public:~Blue() {}void fill() {cout << "Filling with Blue Color" << endl;}
};class AbstractFactory {
public:virtual ~AbstractFactory() {};virtual unique_ptr<Shape> createShape() = 0;virtual unique_ptr<Color> createColor() = 0;
};class ConcreteFactory : public AbstractFactory {
public:~ConcreteFactory() {};unique_ptr<Shape> createShape() {return make_unique<Rectangle>();};unique_ptr<Color> createColor() {return make_unique<Red>();};
};class ConcreteFactory2 : public AbstractFactory {
public:~ConcreteFactory2() {};unique_ptr<Shape> createShape() {return make_unique<Circle>();};unique_ptr<Color> createColor() {return make_unique<Blue>();};
};int main() {AbstractFactory* factory = new ConcreteFactory();unique_ptr<Shape> shape = factory->createShape();unique_ptr<Color> color = factory->createColor();shape->draw();color->fill();AbstractFactory* factory2 = new ConcreteFactory();unique_ptr<Shape> shape2 = factory->createShape();unique_ptr<Color> color2 = factory->createColor();shape2->draw();color2->fill();
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com