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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP伪静态写法附代码
Jun 20 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
PHP类型约束用法示例
Sep 28 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
php判断电子邮件是否正确方法
Dec 04 PHP
PHP多进程通信-消息队列使用
Mar 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
php session处理的定制
2009/03/16 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
用原生js做单页应用
2017/01/17 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
医院搬迁方案
2014/06/14 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
大学生个人总结范文
2015/02/15 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
Vue深入理解插槽slot的使用
2022/08/05 Vue.js