<?php //单例模式 class DB{ private static $db;//私有化禁止外部调用 final private function __construct(){ } //禁止被克隆 private function __clone(){//私有化禁止被克隆 } static function getInstance(){//静态化 if(self::$db == null && !(self::$db instanceof self)){ self::$db=new self(); } return self::$db; } } /* * 单例模式是为了节省资源,比如数据库对象,一个实例就够 * */ //注册树模式 class Register{ protected static $objects; static function _set($alias, $obj){ self::$objects[$alias] = $obj; } static function _unset($alias){ unset(self::$objects[$alias]); } static function _get($obj){ if(isset(self::$objects[$obj])){ return self::$objects[$obj]; } } } /* * 注册树模式 把对象注册到全局的书上面,取的时候只需要在从树上取即可 * */ class Factory{ static function createDB(){ $db = DB::getInstance();//工厂结合单例模式 Register::_set('mysql',$db); return $db; } } /* 使用场景 当我们定义一个db类,在很多文件中都有使用 new DB(); 当 我们的DB 类根据需求发生改变比如变成了DA 此时就不需要所有文件去更改new DB(); 因为使用的是 工厂模式;只需要更改Factory内部的代码就行了; */ $db = Factory::createDB();//工厂只调用一次把数据库对象注册到树上,取的时候就 //下次再取db就 $db = Register::_get('mysql');
php 三种基础设计模式结合使用
最新推荐文章于 2020-02-23 14:32:19 发布