简单工厂

简单工厂的本质是:选择实现

简单工厂的结构和说明

  • Api:定义客户所需要的功能接口。
  • Impl:具体实现 Api 的实现类,可能会有多个。
  • Factory:工厂,选择合适的实现类来创建 Api 接口对象。
  • Client:客户端,通过 Factory 来获取 Api 接口对象,然后面向 Api 接口编程。

简单工厂的优缺点

优点
  • 帮助封装
    简单工厂虽然很简单,但是非常友好地帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。
  • 解耦
    通过简单工厂,实现了客户端和具体实现类的解耦,客户端根本就不知道具体是谁来实现,也不知道具体如何实现,客户端只是通过工厂获取它需要的接口对象。
缺点
  • 可能增加客户端的复杂度
    如果通过客户端的参数来选择具体的实现类,那么就必须让客户端能理解各个参数所代表的的具体功能和含义,这样会增加客户端使用的难度,也部分暴露了内部实现,这种情况可以选用可配置的方式来实现。
  • 不方便扩展子工厂
    私有化简单工厂的构造方法,使用静态方法来创建接口,也就不能通过写简单工厂类的子类来改变创建接口的方法和行为了。不过,通常情况下是不需要为简单工厂创建子类的。

简单工厂的本质是:选择实现

注意简单工厂的重点在选择,实现是已经做好了的。就算实现再简单,也要由具体的实现类来实现,而不是在简单工厂来实现。简单工厂的目的在于为客户端来选择相应的实现,从而使得客户端和实现之间解耦。

实现简单工厂的难点就在于如何选择实现,可以通过简单的静态传参,也可以在运行的时候由工厂去读取内存或数据库中的值,然后根据这个值来选择具体的实现。

相关模式

  • 简单工厂和抽象工厂模式
    简单工厂是用来选择实现的,可以选择任意接口的实现。一个简单工厂可以由多个用于选择并创建对象的方法,多个方法创建的对象可以由关系也可以没有关系。
    抽象工厂模式是用来选择产品簇的实现的,也就是说一般抽象工厂里面有多个用于选择并创建对象的方法,但是这些方法所创建的对象之间通常是有关系的,这些被创建的对象通常是构成一个产品簇所需要的部件对象。
    所以从某种意义上来说,简单工厂和抽象工厂是类似的,如果抽象工厂退化成为只有一个实现,部分层次,那么久相当于简单工厂了。
  • 简单工厂和工厂方法模式
    工厂方法的本质也是用来选择实现的,和简单工厂的区别在于工厂方法是把选择具体实现的工程延迟到子类去实现。
    如果把工厂方法中选择的实现放到父类直接实现,那就等同于简单工厂。
  • 简单工厂和能创建对象实例的模式
    简单工厂可以和其他任何能够具体的创建对象实例的模式配合使用,比如:单例模式、原型模式、生成器模式等。

研磨设计模式之简单工厂相关推荐

  1. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  2. 研磨设计模式之简单工厂模式-3

    3  模式讲解 3.1  典型疑问 首先来解决一个常见的疑问:可能有朋友会认为,上面示例中的简单工厂看起来不就是把客户端里面的"new Impl()"移动到简单工厂里面吗?不还是一 ...

  3. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  4. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  5. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  6. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  7. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  8. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  9. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  10. 工厂设计模式、简单工厂设计模式、抽象工厂设计模式

    一.简单工厂设计模式.工厂设计模式,抽象工厂设计模式总体分析 简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类. 比如下图中的鼠标工厂,专业生产鼠标,给参数0,生 ...

最新文章

  1. 详细讲解MFS分布式文件系统搭建(内含源码包)
  2. python面试常见问题-10个Python面试常问的问题
  3. 如何让机器获得幽默感——Goolge图学习技术揭秘
  4. 数据库分离 附加 sqlserver
  5. 每天学一点Flash(55) 认识类的结构
  6. mysql FROM_UNIXTIME 格式化MYSQL时间戳函数
  7. 在FreeBSD 用户空间与内核空间使用内存共享
  8. 《天下3》幻化:剧情任务
  9. Python+Dlib库实现人脸合成
  10. skimage rescale_intensity函数
  11. 软件开发培训学校四大培训标准,引领行业标杆
  12. 【DeepSORT系列之】Cosine Metric Learning训练与demo可视化
  13. 『Java课设』JavaSwing+MySQL实现医院智慧点餐系统
  14. Oracle计算两个日期的月份
  15. ie input兼容 vue_vue+iview 兼容IE11浏览器的实现方法
  16. 树莓派 Pico Clion开发
  17. 扬帆起航——第一篇博客
  18. 在fedora 36 上安装docker
  19. 计算机处理器i3性能,笔记本电脑的CPU i3/i5/i7处理器哪个好?
  20. 全球及中国聚氨酯热固性弹性体(TSU)行业研究及十四五规划分析报告

热门文章

  1. 趣谈网络协议(二)传输层
  2. 双轨制奖金分配系统,兼顾技术人员老龄化问题
  3. L298N模块详细使用教程
  4. HVite源码解析续
  5. 提问:AdventNetSnmp.jar这个包是做什么用的和snmp有什么关系
  6. 杀毒软件-试用卡巴斯基全方位安全软件
  7. 数据挖掘十大经典算法原理
  8. 沟通CTBS助大川集团集中部署K/3系统
  9. 计算机科学导论填空题,计算机科学导论习题
  10. linux操作系统实训心得总结,操作系统实验报告心得体会