设计模式开篇
作为一个php的初学者,如果想要对框架(如tp、laravel等)有更好的理解,阅读其中的源码,就必须对设计模式有一定的了解。框架中将各种设计模式进行组合,尤其是laravel,理解设计模式对于深入框架有很大的帮助。
后面的文章将以结合代码的方式来讲解我对设计模式的理解,希望能对看到这篇文章的人有一定的帮助,有错误也欢迎指正。
观察者模式
观察者模式,有时又被称为发布(publish)-订阅(Subscribe)模式。是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
个人理解:观察者模式一般肯定会存在两个角色,观察者和被观察者。当被观察者的某些状态发生变化的时候,观察者就会去执行某些方法。如用户下单,用户购买下单后,可能会执行如通知用户、减少库存、订单状态改变等一系列动作。如果全部写在一个方法当中,不利于维护。这时利用观察者模式就会减少代码的耦合度,利于修改维护。
代码详解
注:此代码结合了网上的一些案例完成
/**被观察着**/
class observed
{
private $observers=[]; //私有数组存放注册进入的观察者
/**注册观察者类将其放入$observers私有数组中**/
public function register(observer $observer)
{
$this->observers[] = $observer;
}
/**执行已经注入的观察者模式**/
public function notify()
{
foreach ($this->observers as $observer) {
$observer->doSomething();
}
}
}
/**观察者统一接口,有利于被观察者的调用**/
interface observer
{
public function doSomething();
}
/**观察者类,继承观察者接口,实现其中方法**/
class observer1 implements observer
{
public function doSomething()
{
echo "观察者observer1执行了此方法";
}
}
class observer2 implements observer
{
public function doSomething()
{
echo "观察者observer2执行了此方法";
}
}
/**具体实现**/
$observed=new observed();
$observed->register(new observer1());
$observed->register(new observer2());
$observed->notify();