我认为这与构建某些类型的对象所需的资源有关.

非正式地说,如果你告诉某人建造一台Mac,这将是一个艰苦的过程,需要多年的设计,开发,制造和测试,而且可能做得不对.每个Mac都必须重复此过程.但是,如果你介绍一个工厂,所有的辛勤工作只能做一次,那么Mac可以更便宜地生产.

现在考虑Joomla的factory.php.据我所知,JFactory的主要目的是汇集对象并确保不会复制应该相同的对象.例如,JFactory :: getUser()将返回对一个且仅一个对象的引用.如果该用户对象中的某些内容发生了变化,它将随处出现.另请注意,JFactory :: getUser()返回引用,而不是新对象.这是你无法用构造函数做的事情.

通常,在构造对象时需要本地上下文,并且该上下文可能会持久存在并可能采用多种形式.例如,可能有一个MySQL数据库保存用户.如果使用构造函数创建User对象,则需要将Database对象传递给构造函数(或者让它依赖于全局变量).如果您决定将应用程序切换到PostgreSQL,则Database对象的语义可能会发生变化,从而导致需要检查构造函数的所有用法.全局变量让我们隐藏这些细节,工厂也是如此.因此,用户工厂会将构造User对象的细节与需要User对象的位置分离.

工厂什么时候有用?构造对象时涉及背景细节.什么时候构造者更好?当全局变量足够时.

对象工厂PHP,php – 有一个工厂用于创建对象的好处?相关推荐

  1. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  2. 工厂方法模式与抽象工厂模式

    本文是转的 一.引子        话说十年前,有一个暴发户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说&quo ...

  3. 工厂三兄弟之抽象工厂模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9319181 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但 ...

  4. 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解

    工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...

  5. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  6. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  7. java工厂方法_Java设计模式之工厂方法模式

    2.工厂方法模式 <设计模式之禅>中用神话故事女娲造人来比概述工厂方法模式. 女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生 ...

  8. 简单工厂模式,工厂方法模式,抽象工厂模式总结-java版

    文章目录 LOG:更新日志 一.简单工厂模式,工厂方法模式,抽象工厂模式定义 二.三种工厂模式的优缺点以及适用场景 三.名词解释 四.简单工厂模式.工厂方法模式与抽象工厂模式之间的区别 五.抽象工厂模 ...

  9. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

最新文章

  1. 【算法导论】【ACM】归并排序总结
  2. PHP 模拟POST请求
  3. 1.1 MATLAB数值数据
  4. 1052 Linked List Sorting (25 分)【难度: 一般 / 知识点: 链表】
  5. 什么叫光端机?视频光端机的分类具体有哪些?
  6. DevOps组织如何选取拓扑结构以提升协作效能
  7. Cartographer+LOAM+ LIO-SAM核心算法与源码剖析(室内+室外)
  8. Hyperledger Fabric Composer安装blockchain explorer
  9. mysql存大日志_MySQL三大日志
  10. Visual Stdio fopen错误
  11. 卸载Windows下驱动并删除sys文件
  12. 冒险岛开服服务端教程自己搭建服务器需要那些东西
  13. 华天OA漏洞复现手册
  14. C语言踢出字符,《懂球堂》| 大写的C字!如何踢出C罗一样的任意球
  15. 简明c语言,简明易懂的C语言俄罗斯方块
  16. 泪目跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问
  17. 广电网连接问题密码错误找不到netcfg.hlp
  18. Microsoft Virtual WiFi Miniport Adapter 使用方法
  19. 信号灯管理服务器CPU型号,正文-新华三集团-H3C
  20. linux分配iomem,linux 下__iomem 解析【转】

热门文章

  1. 如何保证战略落地_战略如何规划落地?值得借鉴
  2. Java爬虫技术(一)普通网站爬取图片
  3. python 多继承的实现
  4. Python中find函数的作用及用法
  5. Python教程:多维列表(元组)碾成一维形式
  6. Python操作Oracle数据库:cx_Oracle
  7. python教程:关于 [lambda x: x*i for i in range(4)] 理解
  8. Python高手必读,做一个精通规则的玩家
  9. C语言函数 snprintf()(发送有限字符截断字符串输出到 str 所指向的字符串)(字符串拼接、截断拼接)
  10. OpenCV:在imshow() 之前使用namedWindow() 的必要性讨论?