>  기사  >  백엔드 개발  >  PHP 디자인 패턴: 관찰자 패턴 관찰자 디자인 패턴 응용 프로그램 java 관찰자 디자인 패턴 디자인 패턴 데코레이터 패턴

PHP 디자인 패턴: 관찰자 패턴 관찰자 디자인 패턴 응용 프로그램 java 관찰자 디자인 패턴 디자인 패턴 데코레이터 패턴

WBOY
WBOY원래의
2016-07-29 08:49:161120검색

관찰자 패턴 소개

관찰자 패턴(Observer)은 관찰자와 관찰 대상을 완벽하게 분리합니다. 예를 들어, 사용자 인터페이스는 관찰자 역할을 할 수 있으며 비즈니스 데이터는 관찰됩니다. 사용자 인터페이스는 비즈니스 데이터의 변경 사항을 관찰하고 데이터 변경 사항이 발견되면 인터페이스에 표시됩니다. 객체 지향 설계의 한 가지 원칙은 시스템의 각 클래스가 다른 측면보다는 특정 기능에 중점을 둔다는 것입니다. 객체는 한 가지 일을 하고 그것을 잘 수행합니다. Observer 패턴은 모듈 간의 명확한 경계를 그려 애플리케이션의 유지 관리성과 재사용성을 향상시킵니다.

관찰자 디자인 패턴은 객체 간의 일대다 종속 관계를 정의하므로 객체의 상태가 변경되면 이에 의존하는 모든 객체에 알림이 전송되고 자동으로 새로 고쳐집니다.

구현 방법

관찰자 패턴을 구현하는 방법에는 여러 가지가 있습니다. 기본적으로 패턴에는 관찰자와 관찰 대상이라는 두 가지 역할이 포함되어야 합니다. PHP에서는 SplSubject 및 SplObserver 인터페이스가 관찰자 패턴을 구현하는 데 사용됩니다.

SplSubject 관찰 객체

SplSubject {
/* 方法 */
abstract public void attach ( SplObserver $observer ) //将被观察对象注册到观察者中
abstract public void detach ( SplObserver $observer ) //被观察对账取消注册
abstract public void notify ( void )  //通知所有观察者
}

SplObserver Observer

SplObserver {
/* 方法 */
abstract public void update ( SplSubject $subject ) //观察者接受到通知的时候,作出相应改变
}

UML 클래스 다이어그램

设计模式 观察者模式,观察者模式 事件模式,策略模式 观察者模式,c#观察者设计模式,观察者模式 命令模式,观察者设计模式应用,java 观察者设计模式,设计模式 装饰者模

사용자가 성공적으로 등록한 후 사용자의 데이터를 데이터베이스에 저장해야 하며 사용자에게 이메일이 전송됩니다. 관찰자 코드를 사용하여 구현합니다.

등록이 성공하면 관찰자는 알림 메서드를 호출하여 모든 관찰자에게 알립니다.

function _main()
{
	$user = new User('zhibin','zhibin');
	$user->attach(new UserDatabase());
	$user->attach(new UserMail());
	$user->notify();
}
class User implements SplSubject
{
	/**
	* 帐号
	* @var string
	*/
	private $_user_name;
	/**
	* 密码
	* @var string
	*/
	private $_password;
	/**
	* 观察者列表
	* @var array
	*/
	private $_observers;
	
	public function __construct($user_name,$password)
	{
		$this->_user_name = $user_name;
		$this->_password = $password;
		$this->_observers = array();
	}
	
	public function attach(SplObserver $obs)
	{
		array_push($this->_observers,$obs);
	}
	
	public function detach(SplObserver $obs)
	{
		if($key = array_search($obs,$this->_observers,true))
		{
			unset($this->_observers[$key]);
		}
	}
	
	public function notify()
	{
		foreach($this->_observers as $obs)
		{
			$obs->update($this);
		}
	}
}

class UserDatabase implements SplObserver
{
	public function update(SplSubject $sub)
	{
		//update database
		echo 'update database'.PHP_EOL;
	}
}

class UserMail implements SplObserver
{
	public function update(SplSubject $sub)
	{
		//send mail to user
		echo 'send mail to user'.PHP_EOL;
	}
}
_main();

위 내용은 PHP 디자인 패턴인 옵저버 패턴을 소개하고 있으며, 옵저버 패턴과 디자인 패턴을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.