当前位置:网站首页>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;}
边栏推荐
- golang刷leetcode: 在每个树行中找最大值
- 微软SQL服务器被黑客入侵以窃取代理服务的带宽
- 包管理工具Chocolate - Win10如何安装Chocolate工具、快速上手、进阶用法
- js函数防抖和函数节流及其他使用场景
- Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
- LeetCode 2360. 图中的最长环 基环树找环+时间戳
- Packages and packages, access modifiers
- SublimeText3 安装、配置项、包管理、常用必备插件、常用快捷键以及修改
- JumpServer开源堡垒机完成龙芯架构兼容性认证
- golang 刷leetcode:统计打字方案数
猜你喜欢
随机推荐
C#异步和多线程
SublimeText3 安装、配置项、包管理、常用必备插件、常用快捷键以及修改
LeetCode 2360. 图中的最长环 基环树找环+时间戳
回文自动机+CodeTON Round 2 C,D
Summary of @Transactional transaction invocation and effective scenarios
@Transactional 事务调用与生效场景总结
How to use windbg check c # a thread stack size?
解道7-编程技术4
Flink-shell
[C题目]力扣138. 复制带随机指针的链表
SSM integration steps (emphasis)
golang 刷leetcode:将字符串翻转到单调递增
win10安全中心设置不扫描某个文件夹的方法
用户之声 | GBASE南大通用实训有感
golang刷leetcode:拼接数组的最大分数
Ansible installation and configuration
YARN资源调度系统介绍
Informatics Olympiad All-in-One (1257: Knight Moves)
人尽皆知的云原生,到底是大势所趋还是过度炒作?
vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole