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中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
PHP过滤黑名单关键字的方法
Dec 01 PHP
PHP安装memcached扩展笔记
May 28 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
PHP数组访问常用方法解析
Sep 05 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
文章推荐系统(二)
2006/10/09 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php加密解密字符串示例
2016/10/13 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python 装饰器深入理解
2017/03/16 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python绘制直方图和密度图的实例
2019/07/08 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
keras中的History对象用法
2020/06/19 Python
python字典的值可以修改吗
2020/06/29 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
给全校老师的建议书
2014/03/13 职场文书
员工保密承诺书
2014/05/28 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2014年体育工作总结
2014/11/24 职场文书
搬迁通知
2015/04/20 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
小学班主任心得体会
2016/01/07 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书