PHP 设计模式

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();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值