您的位置:首页 > 编程语言 > PHP开发

PHP 设计模式 单例模式 工厂模式 注册模式

2014-11-22 18:08 851 查看
1.工厂模式,工厂方法或者类生成对象,而不是在代码中直接new

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

3.注册模式,全局共享和交换对象

项目文件目录



入口文件 index.php

<?php
/**
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午3:42
*/

define('BASEDIR',__DIR__);
include BASEDIR.'/Imooc/Loader.php';
spl_autoload_register('\\Imooc\\Loader::autoload');

Imooc\Factory::CreateDatabase();  //初始化对象
$db=Imooc\Register::_get('db');
$db->field()->where()->order()->group()->limit()->select();


自动加载类 Loader.php

<?php
/**
* 自动加载类
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午4:12
*/

namespace Imooc;

class Loader {

public static function autoload($class){
require_once BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}

}


工厂类 Factory.php

<?php
/**
* 工厂类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午3:53
*/

namespace Imooc;

class Factory {

public static function CreateDatabase(){
$db=Dbtabase::getInstance();
Register::_set('db',$db);  //注册到对象树
return $db;
}

}


注册树类 Register.php

<?php
/**
* 注册树类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午5:04
*/

namespace Imooc;

class Register {

protected static $Objects;

/**
* 注册到对象树
*
* @param $alias 对象映射
* @param $object 对象
*/
public static function _set($alias,$object){
self::$Objects[$alias]=$object;
}

/**
* 获取对象树对象
*
* @param $alias 对象映射
* @return mixed
*/
public static function _get($alias){
return self::$Objects[$alias];
}

/**
* 注销对象树对象
*
* @param $alias 对象映射
*/
public static function _unset($alias){
unset(self::$Objects[$alias]);
}

}


数据库操作类 Dbtabase.php

<?php
/**
* 数据库操作类
*
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午4:05
*/

namespace Imooc;

class Dbtabase {

private static $_instance;

protected $option=array();

/**
* 构造方法
*/
private function __construct(){

}

/**
* 单例模式创建对象
*
* @return Dbtabase
*/
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}

public function __set($key,$value){
$this->option[$key]=$value;
}

public function __get($key){
return $this->option[$key];
}

/**
* 调用不存在方法名时回调函数
*
* @param $func 方法名
* @param $param 参数
* @return string
*/
public function __call($func,$param){
return "magic function\n";
}

/**
* 调用不存在静态方法名时回调函数
*
* @param $func 方法名
* @param $param 参数
* @return string
*/
public static function __callStatic($func,$param){
return "magic static function\n";
}

/**
* 打印对象时回调函数
*
* @return string
*/
public function __toString(){
return __CLASS__;
}

/**
* 将对象当函数使用时回调函数
*
* @param $param 参数
*/
public function __invoke($param){
return "invoke";
}

/**
* 析构方法
*/
function __destruct(){

}

public function field(){
return $this;
}

public function where(){
return $this;
}

public function order(){
return $this;
}

public function group(){
return $this;
}

public function limit(){
return $this;
}

public function select(){
return $this;
}

}


前台项目控制器类 index.php

<?php
/**
* Created by PhpStorm.
* Author: Administrator
* Date: 14-11-22
* Time: 下午5:57
*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\  =  /O
____/`---'\____
.'  \\|     |//  `.
/  \\|||  :  |||//  \
/  _||||| -:- |||||-  \
|   | \\\  -  /// |   |
| \_|  ''\---/''  |   |
\  .-\__  `-`  ___/-. /
___`. .'  /--.--\  `. . __
."" '<  `.___\_<|>_/___.'  >'"".
| | :  `- \`.;`\ _ /`;.`/ - ` : | |
\  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑       永无BUG
*/

namespace App\Home\Controller;

class index {

public function index(){
echo "Hello,World!";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: