Java 언어에는 명령 모드, 에이전트 모드, 관측 모드 등과 같은 설계 패턴에 대한 많은 직접적인 지원이 포함되어 있습니다. Java는 이러한 패턴을 지원하지만 더 복잡한 응용 프로그램을 충족 할 수는 없습니다. 그러나 간단한 시나리오에서 이러한 수업을 사용하면 종종 그림자를 보는 효과를 얻을 수 있습니다. 따라서 특별한 요구가 없다면 Java에서 이러한 클래스를 사용하는 것이 좋습니다.
모니터링 모드 및 옵저버 모드라고도하는 옵저버 모드는 고전적인 디자인 모드 (GOF 중 하나) 중 하나입니다. Java 언어에는 주로 Java.beans 패키지 에서이 패턴에 대해 지원되는 다음 클래스와 인터페이스가 있습니다.
java.beans.propertychangelistener (인터페이스) java.beans.propertychangesupport (class) java.beans.propertychangeevent (class) java.beans.propertychangelistener
이것은 인터페이스입니다. 분명히이 인터페이스를 구현하는 모든 클래스는 리스너 (또는 관찰자)이며, 듣는 객체의 일부 변경에 관심이 있습니다. 이 인터페이스에는 하나의 방법이 있습니다.
public void propertychange (propertychangeevent evt) {// todo 자동 생성 메소드 스텁} 인터페이스 정의는 간단하고 기능이 분명합니다. 이벤트 (청취자가 생성 한 PropertyChangeEvent)를 수락 한 다음이 이벤트에 따라 반응합니다.
java.beans.propertychangesupport
이 클래스는 관찰자 클래스에서 등록 된 관찰자를 저장하고 관찰자의 변경 사항을 제공하는 데 사용됩니다. 이 유형에는 많은 방법이 없지만 여전히 100% 만 소개됩니다. 그렇지 않으면 뇌를 사용할 수 없습니다.
Public PropertyChangesUpport (Object SourceBean)
이것은 생성자이며 매개 변수는 리스너입니다. PropertyChangelistener는 일반적으로 청취자의 속성으로 사용됩니다. 일반적으로 다음과 같이 사용됩니다.
PRIVES PropertyChangesUpport 리스너 = New PropertyChangesUpport (this);
이 청취자는 하나의 청취자만을 나타내지 않고 청취자 그룹 일 수 있습니다. 그래서이 청취자는 누구입니까? 이번에는 다음 방법을 사용했습니다.
Public Void AddPropertyChangelistener (PropertyChangelistener 청취자)
이 수업이 너무 쉽습니다. 리스너를 추가하십시오. 중국 공산당 제 17 차 국회와 마찬가지로 기자가 인터뷰를 원한다면 먼저 등록해야합니다. 분명히이 방법은 여러 번 (추가)로 호출 될 수 있습니다. 추가 및 뺄셈 :
공개 void removePropertyChangelistener (PropertyChangelistener 청취자)
모니터가 모니터링 된 사람의 변경에 관심이 없으면 모니터에 의해 추진됩니다.
좋아, 모든 기자들이 여기에 있으며, 모니터에 변경이 있다면 이제 사람에게 알릴 때입니다. 다음 방법 중 하나를 사용하십시오.
공공 void firepropertychange (propertychangeevent evt) public void firepropertychange (String propertyname, boolean oldvalue, boolean newvalue) public void firepropertychange (String propertyname, int oldvalue, int newvalue) 공개 void void firepropertychange (Oldvalue, Object Newvalue, Object Newvalue).
실제로, 마지막 세 가지 방법의 매개 변수는 PropertyChangeEvent로 캡슐화되고 첫 번째 방법이 호출됩니다. 그러나 실제로 우리는 여전히 마지막 3 개 중 하나를 직접 호출하는 것을 좋아하며 캡슐화에 신경 쓰지 않습니다. 마지막 세 가지 방법에는 세 가지 매개 변수가 있으며 그중 OldValue와 NewValue는 전후에 값입니다. 첫 번째는 청취자 가이 이름에 따라 응답 할 수 있도록 이름을 변경하는 것입니다. 회의에서와 마찬가지로 모든 정부 정보는 기자들에 의해 들릴 것이지만 일부 언론인들은 대만 문제에만 관심이 있고 다른 언론인은 중국-일본 문제에 관심이 있습니다.
이것이 PropertyChangesUpport 방법에 대한 소개입니다. PropertyChangesUpport는 관찰자의 클래스 (일반적으로 모델)에 사용되므로 그 방법은 관찰 될 때만 여기에서만 호출됩니다.
java.beans.propertychangeevent
이 수업을 소개하기에는 너무 게으르고 그의 주요 방법을보고 무슨 일이 일어나고 있는지 이해합니다.
공개 문자열 getPropertyName () public Object getNewValue () public object getOldValue ()
세 가지 범주가 있으며 다른 범주는 특정 문제를 분석하는 것입니다. 무엇보다도 관찰자를 예로 들어 봅시다.
공개 클래스 도메인 {보호 문자열 ID; 보호 된 문자열 이름; 보호 된 문자열 desname; 보호 된 PropertyChangesUpport 리스너 = New PropertyChangesUpport (this); public String getId () {return id; } public void setId (String id) {this.id = id; firepropertychange ( "domain.id", null, id); } public String getDesName () {return desName; } public void setDesname (String desname) {this.desname = desname; FirePropertyChange ( "domain.desname", null, desname); } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; firepropertychange ( "domain.name", null, name); } public void AddPropertyChangelistener (PropertyChangelistener Listener) {Listeners.AddPropertyChangelistener (리스너); } public void firepropertyChange (문자열 propName, Object OldValue, Object NewValue) {청취자.firepropertyChange (propname, OldValue, newValue); } public void removePropertyChangelistener (PropertyChangelistener Listener) {청취자 .removePropertyChangelistener (리스너); }} 어떤 사람들은 도메인의 세 가지 속성에 관심이 있습니다. 다음은이 사람들 중 하나입니다.
공개 클래스 SimpleObserver는 PropertyChangelistener {.... @override public void propertychange (propertychangeevent evt) {if (evt.getPropertyName (). Equals ( "domain.name")) {// 일부 작업}}} 간단한 테스트 클래스는 다음과 같습니다.
public class simpletest {public static void main (String [] args) {SimpleObserver Observer = new SimpleObserver (); 도메인 도메인 = 새로운 도메인 (); 도메인 .addpropertychangelistener (관찰자); domain.setName ( "Yangsq"); ......}}분명히, SimpleObserver에서 PropertyChange 메소드의 실행을 관찰 할 수 있습니다.