PHP工厂模式的好处

PHP工厂模式的好处 顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解 一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果。举例说明,以下是一个User类,非常简单:01.02.      03.    int

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 顾名思义,工厂是可以加工零件的,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();

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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164358.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux驱动编程中EXPORT_SYMBOL()介绍

    Linux驱动编程中EXPORT_SYMBOL()介绍一、查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义。二、那么EXPORT_SYMBOL的作用是什么?      EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。三、使用方法 

    2022年7月12日
    11
  • delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串

    delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串介绍本文章介绍了DelphiXE5Android手机端转换Ansi字符串,本代码是“浙江-樵夫”开发的一个程序,用来对字符串进行转换,主要代码是://读入Ansi(简体中文)文件…procedureTForm1.CornerButton3Click(Sender:TObject);varStream:TMemoryStream;beginStream:=TMemoryStream….

    2022年7月18日
    11
  • 万能激活成功教程器修改器_闪照激活成功教程软件

    万能激活成功教程器修改器_闪照激活成功教程软件第一步:下载补丁文件如果是2017.2以上版本的,需要JetbrainsCrack-2.6.6及以上版本如果是2018.1及以上版本的,需要JetbrainsCrack-2.8及以上版本本人是windows64G系统,安装的2018.1.4专业版,试过JetbrainsCrack-2.6的,只能延长有效期一年;使用JetbrainsCrack-2.8的版本,有效期到2099年12月31…

    2025年7月7日
    0
  • JQ使用Append添加html文本后再删除该html文本

    JQ使用Append添加html文本后再删除该html文本

    2021年9月8日
    77
  • 安装VMtool_虚拟机没有安装VMware Tools

    安装VMtool_虚拟机没有安装VMware Tools安装VMTOOL工具1.VMtoolsVMtools顾名思义就是Vmware的一组工具。主要用于虚拟主机显示优化与调整,另外还可以方便虚拟主机与本机的交互,如允许共享文件夹,甚至可以直接从本机向虚拟主机拖放文件、鼠标无缝切换、显示分辨率调整等,十分实用。2.先启动系统3.安装4.将安装包复制到桌面5.解压压缩包tar-zxvf*.tar.gz6.进入解压文件运行./vmware-install.pl7.安装完成选择yes,遇到选项回车。安装完成reboot。..

    2022年9月1日
    0
  • java .gml格式_GML格式错误

    java .gml格式_GML格式错误可能我理解有些错误哈 有 GML 文档说明地址吗 我通过 postgis 与 gdal 转换出来结果如下 85332 7 084941 6 087757 1 090995 7 16022

    2025年7月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号