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中cookies使用指南
Mar 16 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
浅谈PHP的反射机制
Dec 15 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
PHP实现网站访问量计数器
Oct 27 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 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生成HTML静态页面实例代码
2008/08/31 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
php内嵌函数用法实例
2015/03/20 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
使用cx_freeze把python打包exe示例
2014/01/24 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
Django时区详解
2019/07/24 Python
Python进程池Pool应用实例分析
2019/11/27 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
物业管理员岗位职责范文
2013/11/25 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA