热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发日志:设计模式之简易工厂模式解析与应用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[设计模式]简单工厂模式相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[设计模式]简单工厂模式相关的知识,希望对你有一定的参考价值。






简单工厂模式优点:
1.客户端和具体实现解耦

2.对于某些对象的创建过程比较复杂的情况,我们不用考虑这些。

简单工厂模式缺点:
1.简单工厂模式,增加新的功能是通过修改源代码实现,不符合开闭原则。

2.这个工厂(类)职责过重,这个工厂(类)发生问题,会影响很多使用这个工厂(类)的模块

代码如下:

#include <iostream>
using namespace std;
class AbstratctFruit
{
public:
virtual void showName() &#61; 0;
};
class Apple :public AbstratctFruit
{
public:
virtual void showName()
{
cout << "我是苹果" << endl;
}
};
class Banana :public AbstratctFruit
{
public:
virtual void showName()
{
cout << "我是香蕉" << endl;
}
};
class Pear :public AbstratctFruit
{
public:
virtual void showName()
{
cout << "我是梨子" << endl;
}
};
//水果工厂
class FruitFactor
{
public:
static AbstratctFruit * CreateFruit(string flag)
{
if (flag &#61;&#61; "apple") return new Apple;
else if (flag &#61;&#61; "banana") return new Banana;
else if (flag &#61;&#61; "pear") return new Pear;
else return nullptr;
}
};
void test01()
{
AbstratctFruit *fruit &#61; FruitFactor::CreateFruit("apple");
fruit->showName();
delete fruit;
fruit &#61; FruitFactor::CreateFruit("banana");
fruit->showName();
delete fruit;
fruit &#61; FruitFactor::CreateFruit("pear");
fruit->showName();
delete fruit;
}
int main()
{
test01();
return 0;
}

测试结果:
在这里插入图片描述






推荐阅读
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 探讨 try-finally 结构中 finally 块的执行情况
    本文深入分析了 Java 中 try-finally 结构的执行机制,特别是探讨了在不同情况下 finally 块是否会得到执行。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • Go语言实现文件读取与终端输出
    本文介绍如何使用Go语言编写程序,通过命令行参数指定文件路径,读取文件内容并将其输出到控制台。代码示例中包含了错误处理和资源管理的最佳实践。 ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
author-avatar
手机用户2502881937
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有