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 ftp文件上传函数(基础版)
Jun 03 PHP
PHP header函数分析详解
Aug 06 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
PHP连接操作access数据库实例
Mar 30 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 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多个版本的分析解释
2011/07/21 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python比较两个列表是否相等的方法
2015/07/28 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
施工班组长岗位职责
2014/01/05 职场文书
工地安全检查制度
2014/02/04 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
收银员岗位职责范本
2015/04/07 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
vue使用echarts实现折线图
2022/03/21 Vue.js