当前位置:网站首页>抽象工厂模式
抽象工厂模式
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;
}
边栏推荐
猜你喜欢
The software testing process specification is what?Specific what to do?
交 叉 数 组
WPF development through practical 】 【 automatic production management platform
一款免费的容器安全 SaaS 平台使用记录
HCIP--BGP基础实验
Jar包启动通过ClassPathResource获取不到文件路径问题
Informatics orsay a tong (1258: 【 9.2 】 digital pyramid)
供电系统电气图
人尽皆知的云原生,到底是大势所趋还是过度炒作?
汉源高科千兆4光4电工业级网管型智能环网冗余以太网交换机防浪涌防雷导轨式安装
随机推荐
The Orsay in Informatics (1256: Bouquet for Algernon)
用户之声 | 我与GBase的缘分
HCIP--路由策略实验
js如何获取浏览器缩放比例
C# Barrier类
10 种最佳 IDE 软件 ,你更忠爱哪一个?
Common tools and test methods for interface testing (Introduction)
一款免费的容器安全 SaaS 平台使用记录
golang刷leetcode:到达角落需要移除障碍物的最小数目
PLC工作原理动画
golang刷leetcode:道路的最大总重要性
How to use windbg check c # a thread stack size?
How to quickly compare two byte arrays for equality in .NET
Digital twins help visualize the construction of smart cities
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
浅议.NET遗留应用改造
Which thread pool does Async use?
用户之声 | GBASE南大通用实训有感
golang 刷leetcode:Morris 遍历
Informatics Olympiad All-in-One (1257: Knight Moves)