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.MVC的模板标签系统(三)
Sep 05 PHP
php,不用COM,生成excel文件
Oct 09 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
简单了解WordPress开发中update_option()函数的用法
Jan 11 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
php微信开发之谷歌测距
Jun 14 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 异常处理实现代码
2009/03/10 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python 类的特殊成员解析
2018/06/20 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
大二法学专业职业生涯规划范文
2014/02/12 职场文书
《我的信念》教学反思
2014/02/15 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
详解python的异常捕获
2022/03/03 Python