【текст】
1. Определение шаблона наблюдателя:
Проще говоря, шаблон наблюдателя определяет зависимость от одного ко многим, позволяя одному или нескольким объектам наблюдателя прослушать объект темы. Таким образом, когда наблюдаемое состояние изменяется, соответствующий наблюдатель должен быть уведомлен, чтобы эти объекты наблюдателя могли быть автоматически обновлены. Например: механизм обработки событий в графическом интерфейсе принимает режим наблюдателя.
2. Внедрение режима наблюдателя:
Субъект (объект интерфейс, который будет наблюдаться): Указывает единый раздела ConcretEsubject; Каждый субъект может иметь несколько наблюдателей; Concretesubject (конкретные наблюдаемые объекты): поддерживает список ссылок на всех конкретных наблюдателей; Когда статус изменяется, уведомление будет отправлено всем зарегистрированным наблюдателям. Наблюдатель (интерфейс наблюдателя): указывает унифицированный интерфейс ConceteObserver; Определяет метод Update (), который будет вызван при изменении состояния наблюдаемого объекта. ConceteObserver: поддерживает ссылку на ConcretESubject; Конкретное состояние синхронизируется с ConcretEsubject; реализует интерфейс наблюдателя, функция метода Update (): как только будет обнаружено изменение субъекта, информация будет обновлена.
Диаграмма описана следующим образом:
Примечание. В наблюдаемом классе есть набор для поддержания всех наблюдателей.
3. Приведите примеры:
[Схема 1]: Определите интерфейс или класс самостоятельно, чтобы реализовать шаблон наблюдателя.
Шаги следующие:
(1) Определите интерфейс, который обладает наблюдателем:
пакет com.vince.observer; Общественный интерфейс наблюдается {// регистр как наблюдатель Public void Registerobserver (Observer Observer); // Отменить Observer Public void RemoadObserver (Observer Observer); // Уведомить всех наблюдателей об обновлении информации публично void notifyobservers ();}(2) Определите конкретный наблюдатель: CUP
пакет com.vince.observer; import java.util.vector; Общедоступный Кубок Кубка класса реализует наблюдаемый {// Список объектов наблюдателя, поддерживаемых частным вектором наблюдателя <exerver> vector = new Vector <Beaserver> (); Частная цена поплавок; public Cup (плавание цена) {this.price = цена; } public float getPrice () {return Price; } public void setPrice (float Price) {// Уведомление всех наблюдателей при изменении цены this.price = цена; notifyObservers (); } @Override public void RegisterObserver (Observer stemver) {// userver vector.add (stemver); } @Override public void removeObserver (stemver stemver) {// Отмена наблюдателя vector.remove (stemver); } @Override public void notifyObservers () {// реализовать уведомление All Observer объектов для (stemver stecerver: ecector) {stemver.update (цена); }}}(3) Определите общий интерфейс, который имеет наблюдатель: (обновление данных, конечно, является конечным результатом, который должен быть выполнен с наблюдателем)
Пакет com.vince.observer; Public Interface Observer {public void update (float price); 5}(4) Определите конкретные объекты наблюдателя:
Package com.vince.observer; Public Class Person реализует наблюдатель {private String name; Public Perform (String name) {this.name = name; } @Override public void update (float Price) {System.out.println (имя+"Цена следующей чашки, которой вы следуете, была обновлена по адресу:"+цена); }}(5) Тест:
пакет com.vince.observer; открытый тест класса {public static void main (string [] args) {// Создать объект -объект Cull Cull Cull = New Cup (3000); // Создать два объекта наблюдателя человека P1 = новый человек ("Life 1"); Человек P2 = новый человек («Жизнь 2»); // зарегистрироваться как kinder doll.registerobserver (p1); Doll.RegisterObserver (P2); System.out.println («Первый раунд продвижения по службе:»); Doll.SetPrice (2698); // Изменения цен System.out.println («Продвижение второго раунда:»); doll.setprice (2299); // System.out.println ("Второй раунд продвижение:"); Doll.SetPrice (1998); Doll.RemoveObserver (P2); // Удалить Life 2 System.out.println («Продвижение четвертого раунда:»); Doll.SetPrice (1098); }}После запуска результаты отображаются следующим образом:
[Схема 2]: напрямую вызовите API JDK для его реализации.
Шаги следующие:
(1) Реализуйте конкретный объект наблюдателя, наследуя наблюдаемый класс:
пакет com.vince.observer2; import java.util.observable; Общедоступный Кубок Кубка расширяет наблюдаемую {частную платную цену; public Cup (плавание цена) {this.price = цена; } public float getPrice () {return Price; } public void setPrice (float Price) {this.price = price; this.setchanged (); // уведомление, данные изменили это. notifyobservers (); }}(2) Реализовать конкретные объекты наблюдателя путем реализации интерфейса java.util.observer:
пакет com.vince.observer2; import java.util.observable; import java.util.observer; Public Class Person Person Supplyser aserver {private String name; Public Perform (String name) {this.name = name; } @Override public void update (наблюдаемая o, object arg) {if (o exactionof cup) {cup Cup = (cup) o; System.out.println (name+«Цена следующей чашки, которой вы следили, была обновлена по адресу:"+cup.getprice ()); }}}(3) Тест:
пакет 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 («Второй раунд продвижения»); Cup.SetPrice (2698); Cup.DeleteObserver (P2); System.out.println («Третий раунд продвижения»); Cup.SetPrice (1998); }}После запуска результаты следующие:
【Проектные документы】
Ссылка: http://xiazai.vevb.com/201609/yuanma/javaseguancha(vevb.com).rar
4. Резюме: (роль режима наблюдателя)
Паттерн наблюдателя создает абстрактную связь между наблюдателем и наблюдателем. Все символы наблюдателей - это только определенный список наблюдателей.
Поскольку наблюдатель и наблюдатель не совпадают вместе, они могут принадлежать к разным уровням абстракции. Если наблюдатель и наблюдатель объединены, то объект должен пересекать уровни абстракции и конкретизации.
Режим наблюдателя поддерживает коммуникацию вещания. Наблюдатель выпустит уведомление всем зарегистрированным наблюдателям.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.