PHP工厂模式、单例模式与注册树模式实例详解

这篇文章主要介绍了PHP工厂模式、单例模式与注册树模式,结合实例形式工厂模式、单例模式与注册树模式的基本概念、原理、实现方法及使用技巧,需要的朋友可以参考下。

本文实例讲述了PHP工厂模式、单例模式与注册树模式,分享给大家供大家参考,具体如下:

三种基本设计模式

1、工厂模式:工厂方法或者类生成对象,而不是在代码中直接new

2、单例模式:使某个类的对象仅允许创建一个

3、注册模式:全局共享和交换对象

工厂模式:

  1. <?php
  2. namespace IMooc;
  3. class Factory
  4. {
  5. static function createDatabase()
  6. {
  7. $db = new Database();
  8. return $db;
  9. }
  10. }
  11. $db = IMooc\Factory::createDatabase();

工厂模式的好处是,避免Database这个类,在很多个php文件都进行new操作,如果Database这个类发生了一些变更(修改了名字或者参数),那这时候如果不工厂模就需要修改多出了,使用工厂模式,就只需要修改工厂方法即可。

单例模式:

  1. <?php
  2. namespace IMooc;
  3. class Database
  4. {
  5. protected $db;
  6. private function __construct()
  7. {
  8. }
  9. // 获取数据库操作实例
  10. static function getInstance()
  11. {
  12. if(self::$db){
  13. return self::$db;
  14. }else{
  15. self::$db = new self();
  16. return self::$db;
  17. }
  18. }
  19. }
  20. // 无论调用多少次,只会创建一个实例
  21. $db = IMooc\Database::getInstance();
  22. $db = IMooc\Database::getInstance();
  23. $db = IMooc\Database::getInstance();
  24. $db = IMooc\Database::getInstance();

注册树模式:

  1. <?php
  2. namespace IMooc;
  3. class Register
  4. {
  5. protected static $objects;
  6. static function set($alias, $object)
  7. {
  8. self::$objects[$alias] = $object;
  9. }
  10. static function get($name)
  11. {
  12. return self::$objects[$name];
  13. }
  14. static function _unset($alias)
  15. {
  16. unset(self::$objects[$alias]);
  17. }
  18. }
  19. $db = \IMooc\Register::get('db1');