0

0

PHP设计模式之工厂模式学习笔记_PHP教程

php中文网

php中文网

发布时间:2016-07-13 17:15:41

|

1414人浏览过

|

来源于php中文网

原创

本文章来给大家介绍php5中的一个新东西,就是工厂模式了,这里是我常用工厂模式的一些学习笔记,下面与大家一同分享有需要了解的朋友可参考。

在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的 user 类。您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。

工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

示例1:显示工厂类的一个示列。

等式的服务器端包括两个部分:数据库和一组 PHP 页面,这些页面允许您添加反馈、请求反馈列表并获取与特定反馈相关的文章

 代码如下 复制代码

 interface IUser
 {
  function getName();
 }
 class User implements IUser
 {
  public function __construct( $id ) { }
  public function getName()
  {
   return "Jack";
  }
 }
 class UserFactory
 {
  public static function Create( $id )
  {
   return new User( $id );
  }
 }
 $uo = UserFactory::Create( 1 );
 echo( $uo->getName()."n" );
?>

IUser接口定义用户对象应执行什么操作。IUser 的实现称为 User,UserFactory 工厂类则创建 IUser 对象。此关系可以用图1中的UML 表示。

立即学习PHP免费学习笔记(深入)”;


图 1. 工厂类及其相关 IUser 接口和用户类

  如果您使用 php 解释器在命令行上运行此代码,将得到如下结果:

% php factory1.php
Jack
%
 

测试代码会向工厂请求 User 对象,并输出 getName 方法的结果。

  有 一种工厂模式的变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对 象,然后设置许多属性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不必将复制好的代码在在代码库中到处粘贴。

示例2 显示使用工厂方法的一个示例。

 代码如下 复制代码

interface IUser
{
  function getName();
}
class User implements IUser
{
  public static function Load( $id )
  {
        return new User( $id );
  }
  public static function Create( )
  {
        return new User( null );
  }
  public function __construct( $id ) { }
  public function getName()
  {
    return "Jack";
  }
}
$uo = User::Load( 1 );
echo( $uo->getName()."n" );
?>


好了上面讲了很多了, 下面我来来看个实例

PHP5学习对象教程
PHP5学习对象教程

PHP5学习对象教程由美国人古曼兹、贝肯、瑞桑斯编著,简张桂翻译,电子工业出版社于2007年12月1日出版的关于PHP5应用程序的技术类图书。该书全面介绍了PHP 5中的新功能、编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制,帮助读者系统了解、熟练掌握和高效应用PHP。

下载

我们建立以下四个文件

index.php

 代码如下 复制代码

include_once("f.inc.php");
$f=new factory;
$t1=&$f->create('T1');
echo $t1->getName();
echo $config;
?>

f.inc.php

 代码如下 复制代码

class factory
{
 function factory()
 {
  $this->mClasses=array('T1'=>'t1.inc.php','T2'=>'t2.inc.php');
 }
 function &create($class)
 {
  if (!class_exists($class))
  {
   require_once($this->mClasses[$class]);
  }
  return new $class;
 }
}
?>

t1.inc.php

 代码如下 复制代码

global $config;
$config='surfchen';
class T1
{
 var $mName='name::T1';
 function getName()
 {
  return $this->mName;
 }
}
?>

t2.inc.php

 代码如下 复制代码

class T2
{
 function T2()
 {
  echo 't2 is ok';
 }
}
?>

在index.php里,我们通过一个factory类来创建其他的类实例。
在factory里,保存有一个数组$this->mClasses,格式为array(“类名”=>”类文件路径”).
我们通过factory::create()来创建一个类实例的时候,在create()里,会首先检测类是否存在,如果不存在,就根据$this->mClasses把类对应的类文件包含进来。然后创建并返回一个该类的实例。

这样,我们只需要把factory类文件包含进执行的脚本(如index.php)中就可以了。

大家可能还注意到了在t1.inc.php中的这两行代码。

 代码如下 复制代码
global $config;
$config='surfchen';

为什么需要global呢?因为t1.inc.php是在factory::create中被包含的,t1文件中的变量将会默认为create的函数级变量。所以我们需要对其中的变量(如$config)进行global以便index.php能访问到。

运行index.php,将会输出

 代码如下 复制代码
name::T1surfchen

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/628801.htmlTechArticle本文章来给大家介绍php5中的一个新东西,就是工厂模式了,这里是我常用工厂模式的一些学习笔记,下面与大家一同分享有需要了解的朋友...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号