1、单例模式
<?php
/**
* 单例模式:对操作频繁的类只实例化一次,降低消耗
*/
class test {
private static $object=null;
//私有化构造函数,禁止外部实例化
private function __construct() {
echo mt_rand(1,10);
}
//私有化克隆函数,禁止复制对象实例
private function __clone() {
}
//对外接口
public static function to_object() {
if(is_null(self::$object)) {
self::$object= new self();
}
return self::$object;
}
public function test() {
echo 2;
}
}
test::to_object();
$a= test::to_object();
$a->test();
//test 只实例化了1次
2、工厂模式
<?php
/**
* 工厂模式:在一个方法中根据条件生成不同的对象
*/
//基类
abstract class work {
abstract protected function count($a,$b);
}
//加法
class add extends work {
public function count($a,$b) {
echo $a+$b;
}
}
//减法
class delete extends work {
public function count($a,$b) {
echo $a-$b;
}
}
//生成对象
class to_object {
public static function index($k) {
switch ($k) {
case '+':
return new add();
break;
case '-':
return new delete();
break;
}
}
}
//测试
$object= to_object::index('+');
echo $object->count(10,10);
3、观察者模式
<?php
/**
* 观察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部统一访问 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
$paper = new Paper();
$paper->register(new Subscriber());
$paper->trigger();