【텍스트】
1. 관찰자 패턴의 정의 :
간단히 말해서, 관찰자 패턴은 일대일 의존성을 정의하여 하나 이상의 관찰자 객체가 주제 객체를들을 수 있도록합니다. 이러한 방식으로 관찰 된 상태가 변경되면 해당 관찰자에게 이러한 관찰자 객체를 자동으로 업데이트 할 수 있도록 알려야합니다. 예를 들어, GUI의 이벤트 처리 메커니즘은 관찰자 모드를 채택합니다.
2. 옵저버 모드 구현 :
대상 (관찰 될 객체 인터페이스) : ConcretesUbject의 통합 인터페이스를 지정합니다. 각 대상은 여러 관찰자를 가질 수 있습니다. ConcretesUbject (특정 관측 객체) : 모든 특정 관찰자에 대한 참조 목록을 유지합니다. 상태가 변경되면 모든 등록 된 관찰자에게 알림이 전송됩니다. Observer (Observer Interface) : ConcreteObserver의 통합 인터페이스를 지정합니다. update () 메소드를 정의하며 관찰 된 객체의 상태가 변경 될 때 호출됩니다. ConcreteObserver : ConcretesUbject에 대한 참조를 유지합니다. 특정 상태는 ConcretesUbject와 동기화됩니다. Observer 인터페이스, 업데이트 () 메소드의 기능 : 주제의 변경이 감지되면 정보가 업데이트됩니다.
다이어그램은 다음과 같이 설명됩니다.
참고 : 모든 관찰자를 유지하기 위해 관찰 된 클래스에 세트가 있습니다.
3. 예제 :
[체계 1] : 관찰자 패턴을 구현하기 위해 인터페이스 또는 클래스를 직접 정의하십시오.
단계는 다음과 같습니다.
(1) 관찰자가 소유 한 인터페이스를 정의하십시오.
package com.vince.observer; public Interface Observable {// 관찰자 공개 void RegisterObserver (Observer Observer)로 등록; // 관찰자 공개 void removeObserver (Observer Observer)를 취소합니다. // 모든 관찰자에게 정보를 업데이트하도록 통지합니다.(2) 특정 관찰자를 정의하십시오 : 컵
패키지 com.vince.observer; import java.util.vector; public class 컵은 관찰 가능 {// 관찰자 개인 벡터 <secterver> vector = new vector <secterver> ()에 의해 유지되는 관찰자 개체 목록 목록; 개인 플로트 가격; 공개 컵 (플로트 가격) {this.price = 가격; } public float getPrice () {리턴 가격; } public void setPrice (float price) {// 가격을 수정할 때 모든 관찰자에게 알립니다. NotifyObservers (); } @override public void registerObserver (Observer Observer) {// register inserver vector.add (옵저버); } @override public void removeObserver (Observer Observer) {// 옵저버 벡터를 취소합니다 (옵저버); } @override public void notifyobservers () {// 구현 모든 관찰자 객체 (옵저버 옵저버 : 벡터) {observer.update (price); }}}(3) 관찰자가 가지고있는 공통 인터페이스를 정의합니다. (데이터 업데이트는 물론 최종 결과는 관찰자와 함께 수행됩니다)
package com.vince.observer; public interface observer {public void update (float price); 5}(4) 특정 관찰자 객체 정의 :
package com.vince.observer; public class personements observer {private string name; 공개 사람 (문자열 이름) {this.name = 이름; } @override public void update (float price) {system.out.println (이름+"팔로우하는 컵의 가격은 다음으로 업데이트되었습니다."+price); }}(5) 테스트 :
package com.vince.observer; public class test {public static void main (string [] args) {// 관찰자 객체 컵 인형을 만듭니다 = New Cup (3000); // 두 관찰자 객체 생성 사람 P1 = 새로운 사람 ( "Life 1"); 사람 P2 = 새로운 사람 ( "생명 2"); // 옵저버 doll.registerobserver (p1)로 등록; doll.registerobserver (p2); System.out.println ( "첫 번째 프로모션 라운드 :"); doll.setPrice (2698); // 가격 변경 System.out.println ( "두 번째 라운드 프로모션 :"); doll.setPrice (2299); // system.out.println ( "2 라운드 프로모션 :"); Doll.SetPrice (1998); doll.removeobserver (p2); // Life 2 System.out.println을 제거합니다 ( "네 번째 라운드 프로모션 :"); Doll.SetPrice (1098); }}실행 후 결과는 다음과 같이 표시됩니다.
[Scheme 2] : JDK API에 직접 전화하여 구현하십시오.
단계는 다음과 같습니다.
(1) 관찰 가능한 클래스를 상속하여 특정 관찰자 객체를 구현하십시오.
패키지 com.vince.observer2; import java.util.observable; public class 컵은 관찰 가능한 {private float price; 공개 컵 (플로트 가격) {this.price = 가격; } public float getPrice () {리턴 가격; } public void setPrice (플로트 가격) {this.price = 가격; this.setchanged (); // 알림, 데이터가 이것을 변경했습니다. }}(2) java.util.observer 인터페이스를 구현하여 특정 관찰자 객체를 구현하십시오.
package com.vince.observer2; import java.util.observable; import java.util.observer; public class person emplicements observer {private String name; 공개 사람 (문자열 이름) {this.name = 이름; } @override public void update (Observable O, Object Arg) {if (o instanceof cup) {컵 컵 = (컵) o; System.out.println (이름+"팔로우중인 컵의 가격은 다음과 같습니다."+cup.getPrice ()); }}}(3) 테스트 :
package com.vince.observer2; public class test {public static void main (String [] args) {Cup Cup = New Cup (3000); 사람 P1 = 새로운 사람 ( "생명 1"); 사람 P2 = 새로운 사람 ( "생명 2"); Cup.AddObserver (P1); Cup.addoBserver (P2); System.out.println ( "첫 번째 홍보 라운드"); cup.setprice (2988); System.out.println ( "제 2 라운드"); cup.setprice (2698); Cup.DeleteObserver (P2); System.out.println ( "제 3 라운드의 프로모션"); Cup.setPrice (1998); }}실행 후 결과는 다음과 같습니다.
【프로젝트 문서 uments
링크 : http://xiazai.vevb.com/201609/yuanma/javaseguancha(Vevb.com).rar
4. 요약 : (관찰자 모드의 역할)
관찰자 패턴은 관찰자와 관찰자 사이에 추상 커플 링을 만듭니다. 모든 관찰자 캐릭터는 알고있는 모든 관찰자 목록 일뿐입니다.
관찰자와 관찰자는 서로 밀접하게 연결되어 있지 않기 때문에 다른 수준의 추상화에 속할 수 있습니다. 관찰자와 관찰자가 모두 함께 던져지면 물체는 추상화와 구체화 수준을 가로 질러야합니다.
관찰자 모드는 방송 통신을 지원합니다. 관찰자는 등록 된 모든 관찰자에게 통지를 발행합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.