设计模式

文章目录


设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
设计模式是对某个问题,经过反复的代码实践与经验总结,得出的最优的解决方案。

1.单例模式
一个类只能产生一个对象!

目的:就是为了节省内存。 三私一公两静态

	final class Singleton{
	// 初始化一个静态属性用来保存对象, 因为静态方法只能访问静态属性
	// 这个属性 设置成私有属性,在类的外部不能访问
	static private $single = ' ';	
	// 第1步
	private function __construct(){}

	// 第2步
	public static function getSingle(){
		// 判断对象是否已经存在
		if( self::$single === " "){
			self::$single = new self;
		}
		return self::$single;
	}

	private function __clone(){}

}

2.工厂模式

工厂模式的意思其实就是提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤,实际上就是建立一个统一的类实例化的函数接口,完事统一调用,统一控制,它是PHP中常用的一种设计模式,一般会配合单例模式一起使用,来加载php类库中的类。
**目的:**为了防止同时new出好多对象。先建立一个工厂的类,再写一个工厂的静态方法,调用这个方法时携带参数去控制实例化哪个对象。

class Factory{
    static public function getClass($class){
        $newClass = new $class();
        return $newClass;
    }
}
class car{

}

class dog{

}

class fly{

}

$objCar = Factory::getClass('dog');

var_dump($objCar);

3.策略模式
有n个做法供你选择,根据你的需要选择某个策略得到结果

4.观察者模式
一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

// 定义一个 基础的事件接口
interface BaseEvent{
	// 添加观察者
	function addObserver(User $obj);

	// 删除观察者
	function delObserver(User $obj);

	// 发通知
	function message($contents);
}

interface User{

	// 当事件发生 用户做出的反应
	function response();
}

class Event implements BaseEvent{

	//  所有的观察者
	public $observers = [];
	
	// 添加观察者
	function addObserver($obj){
		// 加入观察者
		$this->observers[] = $obj;
	}


	// 删除观察者
	function delObserver($obj){

		foreach($this->observers as $k=>$v){
			// 判断 如果 转入的对象与遍历出的对象一致 ,这时要删除它
			if ( $v == $obj)
			{
				unset($this->observers[$k]);
			}
		}
	}

	// 发通知
	function message($contents){
		echo '当'.$contents.'发生的时候<br />';
		foreach($this->observers as $v){
			$v->response();
		}
	}

}

// 英雄类
class Hero implements User{

	function response(){
		echo get_class($this)."无畏生命!<br />";
	}
}

// loser类
class Loser implements User{

	function response(){
		echo get_class($this)."贪生怕死!<br />";
	}
}

// 局外人类
class Outlier implements User{

	function response(){
		echo get_class($this)."默默祈福!<br />";
	}
}

$event = new Event();

$hero = new Hero();
$loser = new Loser();
$outlier = new Outlier();
$profiteer = new Profiteer();

$event->addObserver($hero);
$event->addObserver($loser);
$event->addObserver($outlier);
$event->addObserver($profiteer);

$event->delObserver($profiteer);

$event->message('汶川地震');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值