PHP工厂模式、单例模式与注册树模式实例详解


Posted in PHP onJune 03, 2019

本文实例讲述了PHP工厂模式、单例模式与注册树模式。分享给大家供大家参考,具体如下:

三种基本设计模式

1、工厂模式:工厂方法或者类生成对象,而不是在代码中直接new
2、单例模式:使某个类的对象仅允许创建一个
3、注册模式:全局共享和交换对象

工厂模式:

<?php
namespace IMooc;
class Factory
{
  static function createDatabase()
  {
    $db = new Database();
    return $db;
  }
}
$db = IMooc\Factory::createDatabase();

工厂模式的好处是,避免Database这个类,在很多个php文件都进行new操作,如果Database这个类发生了一些变更(修改了名字或者参数),那这时候如果不工厂模就需要修改多出了,使用工厂模式,就只需要修改工厂方法即可。

单例模式:

<?php
namespace IMooc;
class Database
{
  protected $db;
  private function __construct()
  {
  }
  // 获取数据库操作实例
  static function getInstance()
  {
    if(self::$db){
      return self::$db;
    }else{
      self::$db = new self();
      return self::$db;
    }
  }
}
// 无论调用多少次,只会创建一个实例
$db = IMooc\Database::getInstance();
$db = IMooc\Database::getInstance();
$db = IMooc\Database::getInstance();
$db = IMooc\Database::getInstance();

注册树模式:

<?php
namespace IMooc;
class Register
{
  protected static $objects;
  static function set($alias, $object)
  {
    self::$objects[$alias] = $object;
  }
  static function get($name)
  {
    return self::$objects[$name];
  }
  static function _unset($alias)
  {
    unset(self::$objects[$alias]);
  }
}
$db = \IMooc\Register::get('db1');

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 压缩文件夹的类代码
Nov 05 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php读取csv文件并输出的方法
Mar 14 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 #PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 #PHP
php中的buffer缓冲区用法分析
May 31 #PHP
PHP实现基于状态的责任链审批模式详解
May 31 #PHP
Laravel框架实现调用百度翻译API功能示例
May 30 #PHP
Laravel框架学习笔记之批量更新数据功能
May 30 #PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 #PHP
You might like
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
专科应届生求职信
2013/11/24 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
JS的深浅复制详细
2021/10/16 Javascript