当前位置:网站首页>抽象工厂模式
抽象工厂模式
2022-08-02 20:52:00 【l_ethan】
简介:抽象工厂模式用于产品族的构建,抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
区别:抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。并且当一系列相互关联的产品被设计到一个工厂类里后,客户端的调用将会变地非常简单,而如果要更换这一系列产品,则就只需要更换一个工厂类即可。
优点:
1.拥有工厂方法模式的优点
2.拓展一个产品等级容易,符合开闭原则
缺点:
1.拓展一个产品族是很困难的不符合开闭原则,要修改顶层工厂的接口类,不符合开闭原则
案例:
#include <iostream>
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;
}
边栏推荐
猜你喜欢
随机推荐
Informatics Olympiad All-in-One (1259: [Example 9.3] Find the longest non-descending sequence)
你所不知道的C#中的细节
SQL基础练习题(mysql)
apache calcite中关于model文件配置
"Weekly Translate Go" This time we have something different!-- "How to Code in Go" series launched
Tencent YunMeng every jie: I experienced by cloud native authors efficiency best practices case
Flink Yarn Per Job - 启动AM
数据库分析与优化
数字孪生助力智慧城市可视化建设
go——垃圾回收机制(GC)
【目标检测】YOLOv5:640与1280分辨率效果对比
C# Barrier class
Xcode13.1运行工程报错fatal error: ‘IFlyMSC/IFly.h‘ file not found的问题
【C语言进阶】--指针典题剖析
C primer plus学习笔记 —— 9、联合&枚举&typdef
李沐动手学深度学习V2-bert预训练数据集和代码实现
博客主题美化第二弹
golang刷leetcode: 小于等于 K 的最长二进制子序列
【模型压缩】实例分析量化原理
y85.第四章 Prometheus大厂监控体系及实战 -- prometheus告警机制进阶、pushgateway和prometheus存储(十六)