>백엔드 개발 >PHP 튜토리얼 >PHP 디자인 패턴——관찰자 패턴

PHP 디자인 패턴——관찰자 패턴

WBOY
WBOY원래의
2016-08-08 09:25:341000검색

관찰자 패턴

관찰자 패턴(Observer)은 객체의 상태가 변경되면 이를 의존하는 모든 객체에 통보되고 자동으로 업데이트됩니다.

패턴 내 역할

  • 추상 관찰자(추상 클래스, 확장이 용이함)는 관찰자 개체를 컨테이너에 저장합니다. 이 클래스는 관찰자 추가, 취소 등의 일부 인터페이스를 제공합니다. 옵저버, 옵저버에게 알림(notify)
  • 구체 옵저버(구체 클래스, 옵저버의 추상 클래스 상속) 알림이 필요한 옵저버를 저장하고, 옵저버가 업데이트해야 할 경우 알림 메소드를 호출합니다. 🎜>
  • 추상 관찰자(인터페이스 또는 추상 클래스)는 구체적인 관찰자를 위한 업데이트된 인터페이스를 제공하고, 관찰자가 알림을 받을 때 업데이트합니다.
  • 구체적 관찰자(구체적 클래스, 추상화 관찰자의 상속 또는 구현)의 인터페이스를 구현합니다. 추상 관찰자, 자동 업데이트
phpDemo

추상 관찰자

<code><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>{</span><span>private</span><span>$observer_arr</span> = <span>array</span>();

    <span>/*
        添加观察者
     */</span><span>public</span><span><span>function</span><span>addObserver</span><span>( Observer <span>$observer</span>)</span>
    {</span><span>$this</span>->observer_arr[] = <span>$observer</span>;
    }

    <span>/*
        通知所有观察者
     */</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>foreach</span> (<span>$this</span>->observer_arr <span>as</span><span>$observer</span>) 
        {
            <span>$observer</span>->update();
        }
    }

}
</span></code>
구체 관찰자

<code><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>{</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'event happen!<br/>'</span>;
        <span>//当事件发生时,通知所有观察者</span><span>$this</span>->notify();
    }

}
</code>
추상 관찰자

<code><span><?php</span><span><span>interface</span><span>Observer</span>{</span><span>//自动更新</span><span><span>function</span><span>update</span><span>()</span>;</span>
}

</code>
콘크리트 옵저버

<code><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer1 update<br/>'</span>;
    }
}

<span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer2 update<br/>'</span>;
    }
}

</code>
테스트 코드

<code><span>$obj</span> = <span>new</span> Event();
<span>//添加观察者</span><span>$obj</span>->addObserver(<span>new</span> Observer1());
<span>$obj</span>->addObserver(<span>new</span> Observer2());
<span>$obj</span>->trigger();
</code>
패턴 요약

    장점: 옵저버 패턴은 낮은 결합, 비-결합을 구현합니다. 침입 알림 및 자동 업데이트 메커니즘
  • 단점: 종속 관계가 완전히 제거되지 않았으며 추상 알림자는 여전히 추상 관찰자에 의존합니다.
  • 시험 시나리오: 1. 객체 변경에 필요한 경우 2. 추상 유형에는 두 가지 측면이 있으며, 한 측면이 다른 측면에 의존하는 경우 관찰자 패턴을 사용하여 두 측면을 캡슐화할 수 있습니다. 독립적인 개체로 변경하여 독립적으로 재사용할 수 있도록

위 내용은 PHP 디자인 패턴 중 하나인 옵저버 패턴(Observer Pattern)을 그 내용과 함께 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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