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();

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

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm 2021.11激活[最新免费获取]

    (pycharm 2021.11激活)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlCE…

  • mysql一主多从 读写分离_mysql读写分离原理

    mysql一主多从 读写分离_mysql读写分离原理简介:什么是主从复制,如何实现读写分离,看这篇你就懂了!思维导图文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary前言在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。为什么要采用主从复制读写分离的架构?如何实现?有什么缺点?让我们带着这些问题开始这段学习之旅吧!为什么使用主从复制、读写分离主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。你想,假设是单机,读

  • python3获取Elasticsearch数据库数据

    python3获取Elasticsearch数据库数据python3获取Elasticsearch数据库数据采用scoll滚动搜索,scoll搜索会在第一次搜索的时候保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,这个期间数据变更,用户是看不到的,每次发送scoll请求,需要指定一个scoll参数,指定一个时间窗口,每次搜索请求只要在这个时间窗口内完成就可以了。1.python利用scroll_id游标遍历查询es,获取错误日志路…

  • discuz找不到php.ini,解决Discuz安装时报错“该函数需要 php.ini 中 allow_url_fopen 选项开启…” | Linux玩家…

    discuz找不到php.ini,解决Discuz安装时报错“该函数需要 php.ini 中 allow_url_fopen 选项开启…” | Linux玩家…开启php的fsockopen函数——解决DZ论坛安装问题“该函数需要php.ini中allow_url_fopen选项开启。请联系空间商,确定开启了此项功能在安装dz论坛时遇到因为fsockopen()函数问题无法进入下一步,安装错误显示“该函数需要php.ini中allow_url_fopen选项开启。请联系空间商,确定开启了此项功能”,经过分析,总结了3个解决这个问题的办…

  • flex和圣杯布局「建议收藏」

    flex和圣杯布局「建议收藏」flex和圣杯布局

  • sql语句的简单用法 db2删除修改字段名,db2一次增加多个字段

    sql语句的简单用法 db2删除修改字段名,db2一次增加多个字段

发表回复

您的电子邮箱地址不会被公开。

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