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)


相关推荐

  • 【SQL基础-4】SQL语句练习实例—在SQLzoo平台练习

    目录1平台操作简介2select基本语句2.1第1节selectbasic2.2第1节练习3SELECTfromWORLD练习3.1第2节SELECTfromWORLDTutorial3.2第2节练习4SELECT_from_Nobel练习4.1第3节SELECT_from_Nobel_Tutorial4.2第3节练习5归纳参考文章1平台操作简介本节练习内容主要是该平台左侧红色框内共9节内容,包括对应9节练习。每一节内容和练习完成

  • shiro框架是什么_中国历史知识框架

    shiro框架是什么_中国历史知识框架Shiro 1.权限管理概述2.Shiro权限框架  2.1概念  2.2ApacheShiro与SpringSecurity区别3.Shiro认证  3.1基于ini认证  3.2自定义Realm–认证4.Shiro授权  4.1基于ini授权  4.2自定义realm–授权5.项目集成shiro认证-授权注意点  5.1认证  5.2授权  5.3注解@RequiresPermissions()  5.4标签式权限验证6.S

  • php 5.0 与7.0有什么区别

    php 5.0 与7.0有什么区别

  • 比和比例的联系和区别

    比和比例的联系和区别比和比例一直是学数学容易弄混的几大问题之一,其实它们之间的问题完全可以用一句话概括:比,等同于算式中等号左边的式子,是式子的一种(如:a:b);比例,由至少两个称为比的式子由等号连接而成,且这两个比的比值是相同(如:a:b=c:d)。所以,比和比例的联系就可以说成是:比是比例的一部分;而比例是由至少两个比值相等的比组合而成的.比和比例的区别:区别区别1:意义、项数、各部

  • php中的登陆login

    Login推荐:http://www.cnblogs.com/roucheng/p/phpdongtai.html

    2021年12月27日
  • vue生成二维码带描述_logo二维码生成器

    vue生成二维码带描述_logo二维码生成器yarnaddvue-qr详细配置可访问vue-qr-npmhttps://www.npmjs.com/package/vue-qr<template><vue-qr:logoSrc=”logoSrc”:text=”codeUrl”:size=”95″:logoScale=”0.3″:callback=”getCodeUrl”:margin=”5″:logoCornerRadius=”0″:correctLevel=”3″>&lt…

发表回复

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

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