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设置一边执行一边输出结果的代码
Sep 30 PHP
sae使用smarty模板的方法
Dec 17 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
php swoft框架实例用法
Dec 22 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
我常用的几个类
2006/10/09 PHP
PHP 中的一些经验积累
2006/10/09 PHP
NOT NULL 和NULL
2007/01/15 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
浅析php创建者模式
2014/11/25 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python多进程实现文件下载传输功能
2018/07/28 Python
详解python的四种内置数据结构
2019/03/19 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
pygame实现非图片按钮效果
2019/10/29 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
民主评议党员总结
2014/10/20 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
战友聚会致辞
2015/07/28 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
详解Python常用的魔法方法
2021/06/03 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电