创建型模式之工厂方法模式
2023-12-16 19:31:17
一、概述
1、工厂方法模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类
2、工厂方法模式:不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体的按钮创建过程交给专门的工厂子类去完成,满足开闭原则
3、工厂方法模式:工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象
二、工厂方法模式的结构
工厂方法模式包含以下4个角色
(1)Product(抽象产品)
(2)ConcreteProduct(具体产品)
(3)Factory(抽象工厂)
(4)ConcreteFactory(具体工厂)
三、模式优点
1、工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
2、能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
3、在系统中加入新产品时,完全符合开闭原则
四、模式缺点
1、系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
2、增加了系统的抽象性和理解难度
五、工厂方法模式示例代码
#include <iostream>
using namespace std;
class Fruit
{
public:
virtual void sayName() = 0;
};
class FruitFactory
{
public:
virtual Fruit* getFruit() = 0;
};
//香蕉
class Banana : public Fruit
{
public:
virtual void sayName()
{
cout << "Banana" << endl;
}
};
//香蕉工厂
class BananaFactory : public FruitFactory
{
public:
virtual Fruit* getFruit()
{
return new Banana;
}
};
//苹果
class Apple : public Fruit
{
public:
virtual void sayName()
{
cout << "Apple" << endl;
}
};
//苹果工厂
class AppleFactory : public FruitFactory
{
public:
virtual Fruit* getFruit()
{
return new Apple;
}
};
int main()
{
FruitFactory* factory = nullptr;
Fruit* fruit = nullptr;
factory = new BananaFactory;
fruit = factory->getFruit();
fruit->sayName();
delete factory;
delete fruit;
return 0;
}
文章来源:https://blog.csdn.net/weixin_51795597/article/details/135036330
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!