当前位置:网站首页>抽象工厂模式
抽象工厂模式
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;
}
边栏推荐
猜你喜欢
随机推荐
golang 刷leetcode:统计打字方案数
矩阵白化原理及推导
.NET性能优化-你应该为集合类型设置初始大小
C# Monitor class
HCIP--BGP基础实验
30天啃透这份Framework 源码手册直接面进大厂
ACE JET NPOI
C# Barrier class
golang刷leetcode: 在每个树行中找最大值
华为设备配置BFD多跳检测
一款免费的容器安全 SaaS 平台使用记录
用户之声 | 大学生的“课外学堂”
博客主题美化第二弹
Day35 LeetCode
golang刷leetcode:巫师的总力量和
golang刷leetcode:统计区间中的整数数目
2022年金九银十,Android面试中高频必问的问题汇总
Digital twins help visualize the construction of smart cities
Informatics Olympiad All-in-One (1259: [Example 9.3] Find the longest non-descending sequence)
[C题目]力扣234. 回文链表









