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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
PHP中MD5函数使用实例代码
Jun 07 PHP
PHP $_FILES函数详解
Mar 09 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
php类的扩展和继承用法实例
Jun 20 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
php 三元运算符实例详细介绍
Dec 15 PHP
php防止sql注入的方法详解
Feb 20 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
Yii框架函数简单用法分析
Sep 09 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
javascript整除实现代码
2010/11/23 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python为什么要安装到c盘
2020/07/20 Python
python一些性能分析的技巧
2020/08/30 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
优秀员工自荐书范文
2013/12/08 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
青安岗事迹材料
2014/05/14 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
车位出租协议书范本
2016/03/19 职场文书
Django migrate报错的解决方案
2021/05/20 Python
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
Python中的嵌套循环详情
2022/03/23 Python