Язык Java содержит много прямой поддержки для дизайнерских шаблонов, таких как командный режим, режим агента, режим наблюдения и т. Д. Хотя Java обеспечивает поддержку этих шаблонов, очень проста и не может соответствовать более сложным приложениям. Но в простых сценариях использование этих классов часто может достичь эффекта видеть тень. Поэтому, если у вас нет особых потребностей, лучше использовать эти классы в Java.
Режим наблюдателя, также известный как режим мониторинга и режим наблюдателя, является одним из классических режимов дизайна (один из GOF). На языке Java есть в основном следующие классы и интерфейсы, поддерживаемые для этого шаблона, все из пакета Java.beans:
java.beans.propertychangelistener (интерфейс) java.beans.propertychangesupport (class) java.beans.propertychangeevent (класс) java.beans.propertychangangelistener
Это интерфейс. Очевидно, что все классы, которые реализуют этот интерфейс, являются слушателем (или наблюдателем), которые будут заинтересованы в некоторых изменениях в слушании объекта. Этот интерфейс имеет один метод:
public void PropertyChange (PropertyChangeEvent evt) {// TODO Автогенерированный метод stub} Определение интерфейса простое, и его функция очевидна. Примите событие (PropertyChangeEvent, сгенерированное слушателем), а затем реагировать на основе этого события.
java.beans.propertychangeSupport
Этот класс используется в классе наблюдателя, для спасения зарегистрированных наблюдателей и предоставления им изменений наблюдателя. Для этого типа не так много методов, но он все еще введен только 100% из них, в противном случае вы не сможете использовать свой мозг, ха -ха.
Public PropertyChangeSupport (Объектный источник)
Это конструктор, а параметры - слушатель. PropertyChangelistener обычно используется в качестве свойства слушателя. Обычно используется следующим образом:
частная недвижимость.
Обратите внимание, что этот слушатель не представляет только одного слушателя, он может быть группой слушателей. Так кто же эти слушатели? На этот раз я использовал следующий метод.
Public void AddPropertyChangelistener (PropertyChangelistener Slister)
Этот класс слишком прост, добавьте слушателя. Так же, как 17 -й национальный конгресс Коммунистической партии Китая, если репортер хочет провести интервью, он должен зарегистрироваться в первую очередь. Очевидно, что этот метод можно назвать несколько раз (добавить). Добавление и вычитание:
Public void RemoverpropertyChangelistener (PropertyChangelistener Slister)
Если монитор не заинтересован в каких -либо изменениях в контролируемом человеке, он будет изгнан монитором.
Хорошо, все репортеры здесь, и если в мониторе есть какие -либо изменения, пришло время уведомить человека. Используйте один из следующих методов:
public void firePropertyChange(PropertyChangeEvent evt) public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) public void firePropertyChange(String propertyName, int oldValue, int newValue) public void firePropertyChange(String propertyName, Object oldValue, Object newValue)
Фактически, параметры последних трех методов будут включены в PropertyChangeEvent, а затем будет вызван первый метод. Однако на самом деле нам все еще нравится напрямую назвать одну из последних трех, и нам не волнует инкапсуляция. Последние три метода имеют три параметра, среди которых OldValue и NewValue являются значениями до и после. Первый - это изменить имя, чтобы слушатели могли ответить на основе этого имени. Как и на собрании, вся информация правительства будет услышана журналистами, но некоторые журналисты заинтересованы только в проблеме Тайваня, в то время как другие заинтересованы в проблеме с Китай-Японом.
Это все введение в метод PropertyChangeSupport. Обратите внимание, что, поскольку PropertyChangePport используется в классе (обычно модель) наблюдателя, его методы называются здесь только тогда, когда они наблюдаются.
java.beans.propertychangeevent
Мне лень представить этот класс, просто посмотрите на его основной метод и поймите, что происходит
public String getPropertyName () public Object getNewValue () public Object getOldValue ()
Есть три категории, а другая - проанализировать конкретные проблемы. Давайте возьмем пример, прежде всего, наблюдатель:
открытый класс домен {защищенный идентификатор строки; Защищенное имя строки; защищенная строка desname; Защищенная собственность changePopport Slirlers = new PropertyChangePorport (это); 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 (string name) {this.name = name; FirePropertyChange ("Domain.name", Null, имя); } public void AddPropertyChangelistener (PropertyChangelistener Slireder) {Слушатели.AddPropertyChangelistener (слушатель); } public void FireProperTyChange (строки PropName, Object OldValue, Object newValue) {слушатели. } public void removePropertyChangelistener (PropertyChangelistener Слушатель) {Слушатели.RemoveProperTyChangelistener (слушатель); }} Некоторые люди заинтересованы в трех атрибутах домена. Вот один из этих людей:
Общедоступный класс SimpleObserver реализует PropertyChangelistener {.... @Override public void PropertyChange (PropertyChangeEvent evt) {if (evt.getPropertyName (). equals ("domain.name")) {// выполнять какую -то работу}}}}}}}}}}}}}}}} Вот простой тестовый класс:
открытый класс SimpleTest {public static void main (string [] args) {simpleobserver veamver = new simpleobserver (); Domain domain = new Domain (); domain.addpropertychangelistener (наблюдатель); domain.setname ("yangsq"); ......}}Очевидно, что выполнение метода PropertyChange в SimpleObserver можно наблюдать.