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 相关文章推荐
我的群发邮件程序
Oct 09 PHP
如何写php程序?
Dec 08 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
JSON在PHP中的应用介绍
Sep 08 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 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
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php中的观察者模式简单实例
2015/01/20 PHP
php HTML无刷新提交表单
2016/04/05 PHP
PHP7内核之Reference详解
2019/03/14 PHP
js不是基础的基础
2006/12/24 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
python中map()与zip()操作方法
2016/02/27 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
新闻专业个人求职信
2013/12/19 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
合作意向协议书范本
2014/03/31 职场文书
经营理念口号
2014/06/21 职场文书
志愿者工作心得体会
2016/01/15 职场文书
初中数学教学反思范文
2016/02/17 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Python list列表删除元素的4种方法
2021/11/01 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python