관찰자 모드 - 예 1
2324 단어 디자인 모드
이 예 는 Head First 에서 말 한 기상대 의 예 에서 나 온 것 으로 기상대 의 날씨 가 변 할 때 구독 하 는 기상 관측소 가 제때에 업 데 이 트 될 수 있다.
/**
*
* @author yaoran
*/
interface Observer
{
public function update($temp, $dify, $pre);
}
/**
* -
* @author yaoran
*/
interface Subject
{
//
public function registerObserver(Observer $o);
//
public function removeObserver(Observer $o);
//
public function notifyObserver();
}
include 'Subject.php';
class WeatherData implements Subject
{
//
private $observers;
private $temp;
private $dify;
private $pre;
public function __construct()
{
}
public function registerObserver(Observer $o)
{
$this->observers[] = $o;
}
public function removeObserver(Observer $o)
{
if (in_array($o, $this->observers)) {
$key = array_search($o, $this->observers);
unset($this->observers[$key]);
}
}
public function notifyObserver()
{
if (count($this->observers) > 0) {
foreach ($this->observers as $k=>$o) {
$o->update($this->temp, $this->dify, $this->pre);
}
}
}
//
public function meaChanged(){
$this->notifyObserver();
}
public function setMea($temp, $dify, $pre) {
$this->temp = $temp;
$this->dify = $dify;
$this->pre = $pre;
$this->notifyObserver();
}
}
/**
*
*/
interface Display
{
public function display();
}
/**
*
* @author yaoran
*/
include 'Observer.php';
include 'Display.php';
class ConditDisplay implements Observer,Display
{
private $temp;
private $dify;
private $pre;
private $weaData;
public function __construct(Subject $weaData)
{
$this->weaData = $weaData;
$weaData->registerObserver($this);
}
public function update($temp, $dify, $pre)
{
$this->temp = $temp;
$this->dify = $dify;
$this->display();
}
public function display()
{
echo ' :' . $this->temp . '--' . $this->dify . "\r
";
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.