PHP는 디자인 패턴 - 옵저버 패턴
내가 읽고 있었어요 헤드 퍼스트 디자인 패턴 최근에는 내 자신의 이익을 위해 PHP를 예로 패턴의 일부를 작성하기로 결정했습니다. 코드 제일 먼저 결심 했어 난 하나입니다 옵저버 패턴 . 옵저버 패턴의 공식적인 정의는 :
관찰자 패턴 (비동기의 하위 집합이 패턴을 게시 구독 / )은 소프트웨어 디자인 패턴 에서는 객체 라는 주제를, 관찰자라는 양자 유지리스트를 자사의, 그리고 전화하여 일반적으로 어떤 상태 변화가 자동으로 알려줍니다 그들 중 한 방법 . 그것은 주로 분산 이벤트 처리 시스템을 구현하는 데 사용됩니다.
된 시스템은 더 느슨하게 행사는 이러한 업데이 트에 대한 지식이 통지되고 필요한 모든 시스템을 발생 때 확실하게 결합니다. 예를 들어, 블로그 게시물은 게시물 내용을 저장한 후 우리가 검색 엔진을 (Lucene 등)를 업데이 트해야 할 수도 등 옵서버 패턴의 Sitemap을, 태그, 이메일 가입한 사용자, 업데이 트를 개발자가 수정없이 관찰할 수있는 개체를 추가 리스너를 추가할 수 있습니다 . 관측을 주입함으로써 우리는 그것은 변경하지 않고도 필요한 모든 업데이 트를 수행할 수 있도록 수있는 제목 (예 : 블로그 게시물 편집 시스템)에 (검색 엔진 업데이트 관찰, Sitemap 생성기 등 즉,).
옵저버 패턴은 일반적인 마술에 필요한 시스템을 업데이 트하는 코드를 추가 라인과 함께 관찰할 수있는 개체를 업데이 트하는 것이 발견되기 전에 코드의 라인을 제거하는 필요에 따라. 이것은 쉽게 추가하고 제거하는 감시자를 허용하지 않습니다.
제목 업데이트 업데이트 방법을 통해 자사의 관찰자의 모든. 이 업데이트 방법은 인터페이스를 구현에서 파생되는 각 관찰자의 메서드를 호출합니다. 관측가 관찰할 수있는 개체에 메소드를 통해 자신을 제거 추가할 수 있습니다.
그것은 기본적으로 그것이야! 난 항상 예제 / 그러니 이렇게 이해 제까지 코딩 예제를 배우는 최고의 방법으로 찾을 수 ...
패턴 관측기 PHP를
예제에서 나는 내 피드 뉴스가 뉴스 헤드 라인 업데이 트를 위해 작은 것 보내는 (NewsAggregator) 시스템을 만든 뉴스. 여기에 뉴스 시스템이 재부는 청취자 관측하거나 등 반면 뉴스 피드의 역할을, 띄는 제목, 소요되는 장소 중.
일단 initialised 관측 첨부할 수 있으며, 그들이 알아서 피사체로부터 스스로를 분리합니다. 내 예제에서 난 기사는 제목으로 보내 스캔 이들과 그 해당되는 경우 그 소식을 '큰소리'세 관측을 만들었습니다. 세 관측은 아래에 따라 조건은 검사 이름을 지정하는 경우 수신 뉴스 헤드 라인 :
- 스포츠 옵저버 : '럭비', '축구', '테니스'
- 뉴스 옵저버 : '정치', '금융', '정부'
- 소문 옵저버 : '유명 인사', '음악', '패션'
주제를 initalising 후 나는 뉴스와 소문 관측을 추가하고 뉴스 업데이 트를 보낼 수 있습니다. 더 많은 뉴스 업데이 트가 발송되기 전에이 후 스포츠 관찰자가 추가됩니다. 최종 뉴스 헤드 라인이 발송되기 전에 마지막으로 가십 관찰자가 제거됩니다.
세 가지 다른 관찰자 클래스는 옵저버를 구현하는 인터페이스,이 업데이 트를 제공 그들에게 명확한 인터페이스를 /을 통해 어떤 방법으로받을 것이다 그들. 제목 제공된 첨부 자신을 위해 그들이 할 수있을 것입니다 그들이 인터페이스를 관측기 구현. 이것은 또한 '인터페이스를 구현하는 프로그램이 없습니다'의 프로그래밍 패러다임으로 유지합니다. NewsAggregator 클래스는 방법으로 세 가지 필수 공공 확장 우리가 제공하는 추상 클래스 제목 :
- updateObservers ()
- addObserver ()
- removeObserver ()
이 코드는, 여기에 게재 볼 수 있습니다 에서 PHP 패턴 옵저버 실행 하고, 코드는 이곳에서 다운로드받을 수 PHP는 코드에 옵저버 패턴 .
관찰자 스크립트
<? PHP는 / ** *이 파일은 관찰자를 포함 * * @ 작성자 로이드 Watkin 2009/12/23 @ 이후 * * / 추상 클래스 제목 { 추상 공용 함수 addObserver (옵저버 $ 관찰자); 추상 공용 함수 removeObserver (옵저버 $ 관찰자); 추상 공용 함수 updateObservers ($ newsHeadline); } / ** * 이것은 예를 들어 제목 클래스입니다 * * @ 작성자 로이드 Watkin 2009/12/23 @ 이후 * * / 수업 ArticleAggregator 제목을 확장 { / ** * 우리가 관찰자의 목록을 보유하고 * * @ var에 배열 * / 보호된 $ _observerList = 배열 (); / ** * 관찰자를 추가하는 방법 * * @ var에 옵저버 달러 관찰자 * @ 반환 무효 * / 공용 함수 addObserver (옵저버 $ 관찰자) { $이 -> _observerList [] = $ 관찰자; } / ** * 관찰자를 제거하는 방법 * * @ var에 옵저버 달러 관찰자 * @ 반환 부울 * / 공용 함수 removeObserver (옵저버 $ 관찰자) { {foreach ($이 -> _observerList $ 핵심 = $는 산부인과>) ($ 산부인과 == $ 관찰자 경우) { 해제가 ($이 -> _observerList [중점 달러]); TRUE를 반환; } } False를 반환합니다; } / ** * 방법 관찰자를 업데이 트하려면 * * @ var에 문자열 달러 newsHeadline * @ 반환 무효 * / 공용 함수 updateObservers ($ newsHeadline) { foreach ($이 -> 산부인과 $ 그대로 _observerList) { $ 산부인과> 업데이트 ($ newsHeadline); } } / ** *는 새로운 뉴스를 추가 * * @ var에 문자열 달러 이야기 * @ 반환 무효 * / 공용 함수 addNewsStory ($ 이야기) { {| (|! is_string ($ 층) 빈 ($ 층))하는 경우 새로운 InvalidArgumentException을 ( '! 뉴스 기사 예상') 던지기; } $이 - updateObservers ($ 이야기)>; } }
제목 / 띄는 스크립트
? <PHP는 / ** *이 파일은 주제 * *를 포함 @ 저자 로이드 Watkin * @ 이후 2009/12/23 * / 추상 클래스 제목 {추상 공용 함수 addObserver (옵저버 $ 관찰자); 추상 공용 함수 removeObserver (옵저버 $ 감시자 ); 추상 공용 함수 updateObservers가 ($ newsHeadline);} / ** *이 예제 * * 용 제목 클래스입니다 @ 저자 로이드 Watkin가 * @ / 클래스 2009/12/23 * 이후 ArticleAggregator 제목 {/ ** * 너도 한번은 확장 우리의 관측 정보 * 정보 * @의리스트는 var 배열 * / 보호 $ _observerList = 배열 (); / ** * 방법 * * @ var에 옵저버 $ 관측기 * @ 반환 공극 * / 공공 함수 addObserver (옵저버 $ 관찰자) 관찰자를 추가하려면 {$이 -> _observerList []는 = $ 관찰;} / ** * 방법 * 관찰자를 제거하는 @ var에 옵저버 $ 관측기 * @ 반환 논리 * / 공공 함수 removeObserver (옵저버 $ 관찰자) {foreach ($이 -> {($ 산부인과 == $ 관찰자) {해제가 ($이 -> _observerList [중점 달러]면); TRUE를 반환;}} $ 그대로 _observerList 키 =) 산부인과 달러> false를 반환;} / ** * 방법 관찰자를 업데이 트하려면 * * @ var에 문자열 $ newsHeadline * @ 반환 공극 * / 공공 함수 updateObservers ($ newsHeadline) {foreach ($이 -> _observerList $ 그대로 산부인과) {$ 산부인과> 업데이트 ($ newsHeadline);}} / ** * 추가하기 새로운 뉴스 이야기 * *는 @ var에 문자열 $ 이야기 * @ 반환 공극 * / 공공 함수 addNewsStory ($ 이야기) {(빈 ($ 이야기) |! | is_string ($ 층))하는 경우 {소식을 예상 새로운 InvalidArgumentException을 ( '던져 이야기 ');!} $이 -> updateObservers ($ 스토리);}} 컨트롤러 스크립트
<? PHP는 / ** * 옵저버 디자인 패턴 예제 * * @ 작성자 로이드 Watkin 2009/12/23 @ 이후 * * @ 링크 http://www.evilprofessor.co.uk * / 'observers.php'를 포함; 'subject.php'를 포함; 면 (! 빈 ($ _SERVER는 [ 'HTTP_USER_AGENT'])) { '에코'; } / / 우리가 뭐하는거야? 메아리 'PHP에서 옵저버 패턴의 예'. PHP_EOL; '================================' 에코. PHP_EOL; / 우리 주제 / 설정 $ 제목 = 새로운 ArticleAggregator (); 에코 '- ArticleAggregator가 만든'. PHP_EOL; / / 일부 관측에 추가 $ 제목 -> addObserver (신규 NewsObserver ()); $ 제목 -> addObserver ($ gossiper = 새로운 GossipObserver ()); 에코 '- NewsObverser & GossipObserver 추가된'. PHP_EOL. PHP_EOL; / / 삑, 삑, 삑 ... 뉴스 플래시! 메아리 '특보 : 유명 럭비 선수는 재정 사랑'. PHP_EOL; '================================================ 에코 '. PHP_EOL; $ 제목 -> addNewsStory ( '유명 럭비 선수는 금융을 사랑'); PHP_EOL 에코; 에코 '- SportObserver 알게하고 그룹에 가입하고 싶어!'; $ 제목 -> addObserver (신규 SportObserver ()); PHP_EOL 에코. PHP_EOL; / / 삑, 삑, 삑 ... 뉴스 플래시! 메아리 '특보 : 정부는 또 망쳐 놨어요!' . PHP_EOL; '=======================================' 에코. PHP_EOL; $ 제목 -> addNewsStory은 ( '정부는 또 망쳐 놨!'); PHP_EOL 에코; / / 삑, 삑, 삑 ... 뉴스 플래시! 메아리 '특보 : 패션과 축구 결합'. PHP_EOL; '=======================================' 에코. PHP_EOL; $ 제목 -> addNewsStory ( '패션과 축구 결합'); PHP_EOL 에코; / / 삑, 삑, 삑 ... 뉴스 플래시! ': 음악과 정치, 그 다음은 어떻게 특보?'에코 . PHP_EOL; '==========================================' 에코. PHP_EOL; $ 제목 -> addNewsStory ( '음악과 정치, 다음엔 뭐지?'); PHP_EOL 에코; / ** * Gossipers은 매우 빨리 뉴스 지겨워 성장 결정했습니다 * 오늘은 모든 흥미로운 소식에도 불구하고, 듣기, 그만! * / 에코 '- GossipObserver 지루하며 그룹을 단풍!' . PHP_EOL. PHP_EOL; $ 제목 -> removeObserver ($ gossiper); / / 삑, 삑, 삑 ... 뉴스 플래시 - 업데이트 이전 이야기합니다! 메아리 'NewsUpdate : 패션과 축구 결합 말합니다'. '정부'. PHP_EOL; '================================================ 에코 '. '========='. PHP_EOL; $ 제목 -> addNewsStory은 ( '패션과 축구 결합'. ) '정부는 말합니다'; PHP_EOL 에코; 면 (! 빈 ($ _SERVER는 [ 'HTTP_USER_AGENT'])) { '에코';
}



















































안녕하세요,
첫째, 우리는 영어 다음, 아주 가난한 사람입니다
당신이 사진에 시스템입니다는지 말해 줄래?
페도라 12?
테마는 무엇입니까?
안녕하세요,
당신이 사진에 시스템입니다는지 말해 줄래?
페도라 12?
테마는 무엇입니까?
KDE의와 그 페도 11 적용됩니다. Glasslooks 테마 나는 믿어요.