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安装攻略:常见问题解答(三)
Oct 09 PHP
php获得文件扩展名三法
Nov 25 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
简单谈谈favicon
Jun 10 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
May 11 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
PHP yield关键字功能与用法分析
Jan 03 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/04/22 PHP
PHP Stream_*系列函数
2010/08/01 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
用ADODB.Stream转换
2007/01/22 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python 多线程抓取图片效率对比
2016/02/27 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Python文件操作基础流程解析
2020/03/19 Python
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
销售工作岗位职责
2013/12/24 职场文书
优秀经理事迹材料
2014/02/01 职场文书
实验室标语
2014/06/21 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers