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 相关文章推荐
Phpbean路由转发的php代码
Jan 10 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 PHP
基于php伪静态的实现方法解析
Jul 31 PHP
PHP常用header头定义代码示例汇总
Aug 29 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模拟登陆的实现方法分析
2015/01/09 PHP
帝国cms常用标签汇总
2015/07/06 PHP
php图像处理类实例
2015/07/28 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
JS 去除Array中的null值示例代码
2013/11/20 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的多重装饰器
2015/04/11 Python
python 排序算法总结及实例详解
2016/09/28 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
Python socket 套接字实现通信详解
2019/08/27 Python
Python3常用内置方法代码实例
2019/11/18 Python
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
合伙协议书范本
2014/04/21 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
个人授权委托书范文
2014/09/21 职场文书
信息合作协议书
2014/10/09 职场文书