C++设计模式之简单工厂模式的实现示例
短信预约 -IT技能 免费直播动态提醒
前言
在我们要使用一个对象时,就必须通过类来实例化对象,也就是需要new一个对象。在new的过程是非常复杂的,要经过读文件->解析文本->创建对象->给属性设值等过程。而引入工厂模式,就是将创建类的这个步骤又工厂来帮我们完成,我们只需要去使用工厂里创建好的类即可。在使用工厂时,我们需要让工厂知道我们想要的一个对象,所以我们可以通过传参的方式去告诉工厂我们的需求
定义思想:在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类
优点:
- 实现了客户端和具体实现类的解耦
- 客户端免除了直接创建产品对象的责任,而仅仅“消费”产品产品
- 客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可
缺点:
- 想要增加新的产品类时需要修改源代码,不符合开闭原则
- 工厂类中集中了所有产品类的创建逻辑,如果这个类发生了问题。整个系统都要受到影响
适用场景:
- 工厂类负责创建的对象比较少
- 客户端只知道传入工厂类的参数,对于如何创建对象不关心:
由于简单工厂模式不符合开闭原则,所以大佬将该模式从24种设计模式中移除
代码实现(手机产品)
首先创建一个抽象手机类,指定具体产品手机必须具有指定功能,也就是产品类必须要重写该类中的方法
//抽象手机
class AbstractPhone
{
public:
virtual void ShowName() = 0;
};
具体产品的手机继承抽象手机类并对其方法进行重写
//华为
class Huawei : public AbstractPhone
{
public:
virtual void ShowName()
{
cout << "Huawe Phone" << endl;
}
};
//小米
class Xiaomi : public AbstractPhone
{
public:
virtual void ShowName()
{
cout << "Xiaomi Phone" << endl;
}
};
//苹果
class Apple : public AbstractPhone
{
public:
virtual void ShowName()
{
cout << "Apple Phone" << endl;
}
};
通过传入的参数来确定需要生成哪种手机
//手机工厂
class PhoneFactory
{
public:
static AbstractPhone* CreatePhone(string name)
{
if (name == "huawei")
//...生产细节
return new Huawei;
else if (name == "xiaomi")
//...生产细节
return new Xiaomi;
else if (name == "apple")
//...生产细节
return new Apple;
else
return nullptr;
}
};
测试:
void test()
{
//创建工厂
PhoneFactory* factor = new PhoneFactory;
//创建手机
AbstractPhone* phone;
//指定工厂需要创建的手机
phone = factor->CreatePhone("huawei");
phone->ShowName();
delete phone;
phone = factor->CreatePhone("xiaomi");
phone->ShowName();
delete phone;
phone = factor->CreatePhone("apple");
phone->ShowName();
delete phone;
delete factor;
}
运行截图:
总结
到此这篇关于C++设计模式之简单工厂模式的文章就介绍到这了,更多相关C++简单工厂模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341