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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
php验证session无效的解决方法
Nov 04 PHP
php面象对象数据库操作类实例
Dec 02 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
程序员的表白神器“520”大声喊出来
May 20 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
php实现的二叉树遍历算法示例
Jun 15 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 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 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
详解php用static方法的原因
2018/09/12 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python温度转换实例分析
2018/01/17 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
统计员岗位职责
2013/11/14 职场文书
建筑行业的大学生自我评价
2013/12/08 职场文书
自我评价范文分享
2014/01/04 职场文书
七年级数学教学反思
2014/01/22 职场文书
骨干教师培训方案
2014/05/06 职场文书
大学新闻系求职信
2014/06/03 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
罗马假日观后感
2015/06/08 职场文书
关于军训的感想
2015/08/07 职场文书
小学教师教学随笔
2015/08/14 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏