顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解

一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果。

举例说明,以下是一个User类,非常简单:

01.<?php

02.

03. interface IUser

04. {

05. function getName();

06. function getAge();

07. }

08.

09. class User implements IUser

10. {

11. protected $_name;

12. protected $_age;

13.

14. function __construct($name, $age)

15. {

16. $this->_name = $name;

17. $this->_age = (int)$age;

18. }

19.

20. function getName()

21. {

22. return $this->_name;

23. }

24.

25. function getAge()

26. {

27. return $this->_age;

28. }

29. }

30.

31.?>

我们如果要实例化这个类就要这样:

1.$u = new User(‘小明‘,19);

一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。

突然我想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在我们想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:

1.$u = new User(‘小明‘,19,‘学生‘);

当然我们也可以通过在__construct函数中进行默认值设置来避免这种重复劳动,但事实上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可以通过一个标识来对应一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,我们在调用User类的时候就会变的轻松许多,即便是需要增减参数属性也不需要到处进行代码的替换,下面就是一个工厂类(也可以直接将方法存放在User类)

01. interface IUser

02. {

03. function getName();

04. function getAge();

05. }

06.

07. class User implements IUser

08. {

09. protected $_group;

10. protected $_name;

11. protected $_age;

12.

13. function __construct($name, $age, $group)

14. {

15. $this->_group = $group;

16. $this->_name = $name;

17. $this->_age = (int)$age;

18. }

19.

20. function getName()

21. {

22. return $this->_name;

23. }

24.

25. function getAge()

26. {

27. return $this->_age;

28. }

29. }

30.

31. class Fuser

32. {

33. private static $group = array(

34. array(‘小明‘,19,‘学生‘),

35. array(‘小王‘,19,‘学生‘)

36. );

37.

38. static function create($id)

39. {

40. list($name, $age, $group) = self::$group[(int)$id];

41. return new User($name, $age, $group);

42. }

43. }

44.

45. echo Fuser::create(0)->getName();

得到的结果应该是输出“小明”。

php 工厂模式作用,PHP工厂模式的好处概述相关推荐

  1. php 工厂模式作用,PHP工厂模式的好处

    顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解 一般我们实例 ...

  2. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  3. 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比

    先看各自的结构: 简单工厂模式(SimpleFactory Mode): 简单工厂模式的思路是,首先我们把一些共性的东西(算法)拿出来,进行抽象,比如加减乘除.然后我们在定义一个类作为工厂类,工厂类的 ...

  4. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

    文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...

  5. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...

    回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回  日志记录组件之自主的Vlog>和<第三回  日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...

  6. JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足

    JavaScript学习(四十二)-利用工厂模式创建对象以及工厂模式创建对象的不足 一.利用工厂模式创建对象 工厂模式是JavaScript中的一种设计模式,它的作用是批量创建具有同种属性的对象. 格 ...

  7. 工厂模式——简单工厂模式、工厂方法模式和抽象工厂模式

    1.简述 工厂模式包括简单工厂模式.工厂方法模式和抽象工厂模式,属于创建型模式. 2.不使用工厂模式 (1)类图分析 一个接口Computer,接口有两个实现类HP和Apple,同时有一个测试类Cli ...

  8. 工厂模式之静态工厂模式和工厂方法模式

    1.简介 工厂模式作用:实现了创建者和调用者的分离 详细分类: 静态工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有的代码),又叫简单工厂模式 工厂方法模式:用来生产统一等级 ...

  9. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  10. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

最新文章

  1. 在VS2005中 GridView导入Excel的两点小技巧-附源码
  2. oracle编写备份数据库代码,oracle_oracle数据库创建备份与恢复脚本整理,1:创建用户 复制代码 代码如 - phpStudy...
  3. mysql or 创建索引_Mysql索引优化
  4. 2020牛客暑期多校训练营(第六场)
  5. 深度学习之非极大值抑制(Non-maximum suppression,NMS)
  6. java读取空格_java 读取文件路径空格和中文的处理
  7. Linux--Tail命令
  8. SCAU 8628 相亲
  9. 基于java(springboot框架)的新闻管理系统 开题报告
  10. 数据结构考研复试、面试 ——常见提问总结
  11. 笔记本怎么打开html的面板,联想笔记本控制面板在哪里打开
  12. 【§美女杨颖win7电脑主题下载§系统美化】
  13. 外贸建站五大必备要领
  14. Java模拟醉汉行走问题_用R模拟二维随机行走
  15. 示波器电流探头传播延迟的测量
  16. php 新历转农历,PHP实现阳历转阴历的方法
  17. 2021-2027全球与中国锂电池三元正极材料市场现状及未来发展趋势
  18. 京东数科前端春招面经
  19. CImage图像旋转与缩放
  20. Android开发工具类集合

热门文章

  1. tempdb页面分配争用问题
  2. .net中序列化读写xml方法的总结
  3. weixin-api生成二维码
  4. ATC空管系统的实时控制软件系统分析
  5. android 学习十四 探索安全性和权限
  6. OLE 操作Excel 祥解
  7. 现学活用的XPath爬取豆瓣音乐
  8. 少样本文本分类 InductionNet
  9. 人民日报:研究生期间该懂的47件事,你认可吗?
  10. 【比赛】CCF BDCI新闻情感分类初赛A榜4/2735,复赛1%题解报告