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二分法在IP地址查询中的应用
Aug 12 PHP
PHP 基本语法格式
Dec 15 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
学习php开源项目的源码指南
Dec 21 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php生成年月日下载列表的方法
Apr 24 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
php中apc缓存使用示例
2013/12/25 PHP
php命令行用法入门实例教程
2014/10/27 PHP
解放web程序员的输入验证
2006/10/06 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
Python 功能和特点(新手必学)
2015/12/30 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
深入解析神经网络从原理到实现
2019/07/26 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python笔记之代理模式
2019/11/20 Python
Django更新models数据库结构步骤
2020/04/01 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
Internet体系结构
2014/12/21 面试题
产品工艺师的岗位职责
2013/11/15 职场文书
安全生产责任书范本
2014/04/15 职场文书
庆七一活动总结
2014/08/27 职场文书
争先创优心得体会
2014/09/12 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书