当前位置:网站首页>Abstract Factory Pattern
Abstract Factory Pattern
2022-08-03 00:12:00 【l_ethan】

Introduction: The abstract factory pattern is used for the construction of product families. The abstract factory refers to a factory pattern used when there are multiple abstract roles.The abstract factory pattern can provide an interface to the client, so that the client can create product objects in multiple product families without specifying the specific product.
Difference: Compared with the factory method pattern, the abstract factory pattern is that the factory method pattern is for one product series, while the abstract factory pattern is for multiple product series, that is, the factory method pattern is one product series and one factory class, while the abstract factory pattern is a factory class for multiple product families.In the abstract factory pattern, the client is no longer responsible for the creation of objects, but leaves this responsibility to the specific factory class, and the client is only responsible for calling objects, thus clarifying the responsibilities of each class.And when a series of interrelated products are designed into a factory class, the client's call will become very simple, and if you want to replace this series of products, you only need to replace a factory class.

Advantages:
1. The advantages of having the factory method pattern
2. It is easy to expand a product level, in line with the principle of opening and closing
Disadvantages:
1. It is very difficult to expand a product family. It does not conform to the open-closed principle. It is necessary to modify the interface class of the top-level factory, which does not conform to the open-closed principle.
Case:
#include using namespace std;class AbstractApple {public:virtual void show()=0;};class ChinaApple :public AbstractApple{public:virtual void show() {cout << "china apple" << endl;}};class UsaApple :public AbstractApple {public:virtual void show() {cout << "usa apple" << endl;}};class AbstracBanana {public:virtual void show() = 0;};class ChinaBanana :public AbstracBanana {public:virtual void show() {cout << "china banana" << endl;}};class UsaBanana :public AbstracBanana {public:virtual void show() {cout << "usa banana" << endl;}};class AbstractFactory {public:virtual AbstractApple* create_apple() = 0;virtual AbstracBanana* create_banana() = 0;};class ChinaFactory :public AbstractFactory {public:virtual AbstractApple* create_apple() {return new ChinaApple();}virtual AbstracBanana* create_banana() {return new ChinaBanana();}};class UsaFactory : public AbstractFactory {public:virtual AbstractApple* create_apple() {return new UsaApple();}virtual AbstracBanana* create_banana() {return new UsaBanana();}};int main(){AbstractFactory* af;af = new ChinaFactory;AbstracBanana* ab;ab = af->create_banana();ab->show();AbstractApple* aa;aa = af->create_apple();aa->show();return 0;} 边栏推荐
- 行业 SaaS 微服务稳定性保障实战
- 包管理工具npm- node package management相关知识 、检查包更新、NPM包上传、更换镜像、npm ERR! registry error parsing json
- 如何成为一名正义黑客?你应该学习什么?
- C#异步和多线程
- Li Mu hands-on learning deep learning V2-bert and code implementation
- 回文自动机+CodeTON Round 2 C,D
- vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole
- js how to get the browser zoom ratio
- WPF development through practical 】 【 automatic production management platform
- @Transactional 事务调用与生效场景总结
猜你喜欢
随机推荐
《分布式微服务电商》专题(一)-项目简介
HCIP--路由策略实验
【c】操作符详解(一)
【3D视觉】深度摄像头与3D重建
golang刷leetcode:按位与结果大于零的最长组合
[C题目]力扣1. 两数之和
用户之声 | 大学生的“课外学堂”
LeetCode 2359. 找到离给定两个节点最近的节点 基环树
Bena's life cycle
从零开始配置 vim(5)——本地设置与全局设置
golang 刷leetcode:从栈中取出 K 个硬币的最大面值和
【3D视觉】realsense D435三维重建
回文自动机+CodeTON Round 2 C,D
14、学习MySQL 连接的使用
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
YARN资源调度系统介绍
ORB SLAM3加载Vocabulary更快ORBvoc.bin
【STM32学习3】DMA基础操作
网络运维系列:健康检查的方式
I interviewed a 985 graduate, and I will never forget the expression when answering the "performance tuning" question


![[C题目]力扣138. 复制带随机指针的链表](/img/f6/75f6821343944ced9f1cdec8dffe5c.png)






