工厂模式
定义
- 工厂父类负责定义创建对象的公共接口,子类则负责生成具体的对象
- 将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化哪个类
类图
- 组成
- 抽象产品
- 具体产品
- 抽象工厂
- 具体工厂
时序图
应用场景
- 设计初期就考虑到产品在后期会进行扩展的情况下,可以使用工厂模式
- 产品结构复杂的情况下,可以使用工厂方法模式
代码
#include<iostream>
using namespace std;
class AbstractFruit{
public:
virtual void showName() = 0;
};
class Apple : public AbstractFruit {
public:
virtual void showName() {
cout << "This is the class of Apple" << endl;
}
};
class Banana : public AbstractFruit {
public:
virtual void showName() {
cout << "This is the class of Banana" << endl;
}
};
class Pear : public AbstractFruit {
public:
virtual void showName() {
cout << "This is the class of Pear" << endl;
}
};
class AbstractFactory{
public:
virtual AbstractFruit* createFruit() = 0;
};
class AppleFactory : public AbstractFactory {
public:
virtual AbstractFruit* createFruit(){
return new Apple;
}
};
class BananaFactory : public AbstractFactory {
public:
virtual AbstractFruit* createFruit(){
return new Banana;
}
};
class PearFactory : public AbstractFactory {
public:
virtual AbstractFruit* createFruit(){
return new Pear;
}
};
int main()
{
AbstractFactory* CPFactory = nullptr;
AbstractFruit* CPFruit = nullptr;
CPFactory = new AppleFactory();
CPFruit = CPFactory->createFruit();
CPFruit->showName();
CPFactory = new BananaFactory();
CPFruit = CPFactory->createFruit();
CPFruit->showName();
CPFactory = new PearFactory();
CPFruit = CPFactory->createFruit();
CPFruit->showName();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-04-14 strcpy和memcpy用法(待完善测试用例)