不积跬步无以至千里

记录精彩的程序人生

  • 首页
  • Java
  • Golang
  • PHP
  • Python
  • Nodejs
  • Lua
  • Docker
  • DevOps
  • 文章归档
  • 默认分类
  • 关于
  • 标签

  • 搜索
PostgreSQL hbase 时间同步 nexus 开机启动 nexus, 开机启动 jenkins安装配置 gitlab安装配置 gitlab安装 文件系统 fastdfs gcc切换 gcc升级 mysql8 交换空间 虚拟内存 tcp thrift lua tag test VPN SoftEtherVPN homebrew asm spring tomcat maven jdk ios mac 图案字符 figlet mysql半同步复制 mysql主从同步 一主多从 一主一从 主从同步 反向代理 密码重置 test 虚拟机扩容 swap 虚拟空间 docker ldocker grpc-gateway protobuf 微服务 go grp GRPC 授权登录 OAuth2.0 SOA supervisord supervisor RPC CentOS rabbitmq 环境变量 php-fpm php.ini error php7 lnmp 编译安装 mysql nginx linux java php python redis 字符串操作 mysql5.7 Solo

PHP工厂模式的好处

发表于 2020-05-03 | 分类于 默认分类 | 0 | 阅读次数 1292

顾名思义,工厂是可以加工零件的,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设计模式漫谈之工厂模式
良好的学习技巧和工作方法可以有效提高自己
  • 文章目录
  • 站点概览
ken

ken

记录精彩的程序人生

498 日志
9 分类
77 标签
RSS
Creative Commons
Links
  • 酷壳
0%
© 2010 — 2026 ken
由 Halo 强力驱动
鄂ICP备18013899号-1