简单工厂模式

简单工厂模式的概念

简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负 责创建其他类的实例,被创建的实例通常都具有共同的父类。

具体分类

  1. 工厂(Creator)角色 简单工厂模式的核心,
    它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调 用,创建所需的产品对象。
  2. 抽象(Product)角色
    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  3. 具体产品(ConcreteProduct)角色
    简单工厂模式所创建的具体实例对象



简单工厂模式不是23种设计模式,因为它并不符合开闭原则

简单工厂模式的优缺点

在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界 给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创 建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构 的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实 例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

简单工厂模式的实现

#include<iostream>
using namespace std;//抽象水果
class AbstractFruit{
public:virtual void ShowName() = 0;};//苹果
class Apple :public AbstractFruit{virtual void ShowName(){cout << "我是苹果" << endl;}
};//香蕉
class Banana :public AbstractFruit{
public:virtual void ShowName(){cout << "我是香蕉" << endl;}
};//梨子
class Pear :public AbstractFruit{
public:virtual void ShowName(){cout << "我是梨子" << endl;}
};//建立一个工厂
class FruitFactory{
public:static AbstractFruit *CreateFruit(string flag){if (flag == "apple"){return new Apple;}else if (flag == "pear"){return new Pear;}else if (flag == "banana"){return new Banana;}}
};void test01(){FruitFactory *factory = new FruitFactory;AbstractFruit *fruit = factory->CreateFruit("apple");fruit->ShowName();delete fruit;fruit = factory->CreateFruit("banana");fruit->ShowName();delete fruit;fruit = factory->CreateFruit("pear");fruit->ShowName();delete fruit;
}int main(void)
{test01();system("pause");return 0;
}

设计模式----2(简单工厂模式的概念,简单工厂模式的实现,简单工厂模式的优缺点)相关推荐

  1. 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)

    模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...

  2. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  3. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  4. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  5. 设计模式---4(抽象工厂模式的概念,产品组和产品等级的概念,抽象工厂模式的实现)

    抽象工厂模式 抽象工厂模式的概念 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向 客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品 族的产 ...

  6. 史上最详细的23中设计模式解析,一个不落,理论搭配简单案例,更好理解哦

    目录 一.软件设计模式的产生背景 二.软件设计模式的概念与意义 1. 软件设计模式的概念 2. 学习设计模式的意义 三.23 种设计模式的分类和功能 1. 根据目的来分 2. 根据作用范围来分 3. ...

  7. 设计模式-抽象工厂模式的应用场景及Java中对抽象工厂的应用

    1. 什么是抽象工厂模式 抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的类 抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用 ...

  8. 王争 | 设计模式之美 - 工厂模式:我为什么说没事不要随便用工厂模式创建对象?

    1. 简单工厂(Simple Factory) 在下面这段代码中,我们根据配置文件的后缀(json.xml.yaml.properties),选择不同的解析器(JsonRuleConfigParser ...

  9. uefi怎么念_UEFI模式和32位64位系统安装的简单说明

    UEFI模式和32位64位系统安装的简单说明 2018-11-23 最近见到了很多关于UEFI的说明,虽然这东西出来好久了,但是自己一直没有用上,有UEFI的系统上装系统牵扯到三个方面的问题! 第一: ...

最新文章

  1. 免费技术直播:唐宇迪带你一节课了解机器学习经典算法
  2. Laravel5.4 使用Carbon人性化显示发表评论中文时间
  3. Mysql 向表中插入50万条数据(生成随机字符串和 插入的时间间隔是60s)。
  4. #if 和#ifdef的区别
  5. jquery实现上下左右键盘监听_jQuery监听键盘事件及相关操作使用
  6. 测试nignx php请求并发数,Nginx 高级篇(八)ab 压力测试即 nginx 的性能统计模块...
  7. 简单树组织数据格式化为标准树组织数据
  8. mysql GROUP_CONCAT 排序
  9. 中科院分区 计算机科学与技术专业就业前景,2020年中科院分区(升级版)最新数据分析...
  10. HTML5期末大作业:家乡网站设计——石家庄(10页) HTML+CSS+JavaScrip 旅游网页html 家乡介绍html网页设计 dw旅游景点网页设计 web课程设计网页规划与设计
  11. HDLBits学习------Problem 106~114
  12. Electron--桌面应用开发(基本应用,快速入门)
  13. springcloud微服务中跨域配置
  14. 2020年最新WorldFirst注册图文教程(0.3%提现费)
  15. WEB前端性能优化,提高页面加载速度
  16. php怎么设置段落之间的距离,css如何设置段落间距?margin 属性设置段落间距(代码实例)...
  17. tomcat运行web项目报错:请求的资源[]不可用
  18. snmpwalk之timeout问题
  19. 迅雷下载 HP QTP LR QC AML MyEclipse8.5 Tomcat7地址
  20. Ed2k协议背景介绍及eMule协议的整体架构

热门文章

  1. 关于导入oracle10g的数据到sqlserver2005里的方案总结
  2. 【[SHOI2015]超能粒子炮·改】
  3. 数独项目--关键代码展示:
  4. BI-SqlServer
  5. centos7服务器文件同步,centos7文件实时同步工具lsyncd
  6. 简述select语句的完整语法_SQL里的各种语句的完整语法
  7. java jpa 注解_Java : JPA相关以及常用注解
  8. mysql时间函数总结_MySQL 日期时间函数常用总结
  9. java 入参 是 枚举_java 枚举 参数传递
  10. 获取人口_「微科普」14亿人口数据是如何得到的?