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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++中fstream是什么意思_汽车配置参数图文详解

    c++中fstream是什么意思_汽车配置参数图文详解在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,一,c++文件流的结构:‍1,几个文件流类名称:fstream,ifstream,ofstream,iofstream2,之间的关系:ifstream(inputfilestream)和ofstream(outpufilestream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打…

    2022年9月19日
    0
  • java设计模式1,单一职责原则

    java设计模式1,单一职责原则单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

    2025年6月11日
    0
  • 突然想去旅游

    突然想去旅游  突然想去旅游,一个人,静静的,去到那些宁静的自然风光中去,置身其中,什么也不想! 

    2022年4月29日
    40
  • 成员函数

    成员函数在C++中,允许在结构体中定义函数,该函数称为“成员函数”。描述形式如下:struct结构名{数据成员成员函数};例题:身高问题输入n个学生的信息,每个学生的信息包括姓名、身高、学号。变

    2022年7月3日
    26
  • Matlab 直方图_matlab分析

    Matlab 直方图_matlab分析绘制直方图(水平和垂直的)语法bar(Y)bar(x,Y)bar(…,width)bar(…,’style’)bar(…,’bar_color’)bar(axes_handle,…)h=bar(…)hpatches=bar(‘v6’,…)barh(…)h=barh(…)hpatches=barh(‘v6

    2022年10月18日
    0
  • 学英语网络资源推荐

    学英语网络资源推荐1.推荐标准和目的2.中国十佳英语学习网站推荐3.学英语Web资源推荐4.在线辞典大全5.语法网站列表6.英语新闻网站大全7.英文电影网站大全返回1.推荐标准和目的希望能对了解英语(文化)不多的国内英语初学者(尤其是社会人士)有所帮助。希望打开初学者利用Internet学习英语的…

    2022年5月25日
    31

发表回复

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

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