В этой статье описывается использование режима наблюдателя для реализации функции высокотемпературного предупреждения метеорологического бюро. Поделитесь этим для вашей ссылки, следующим образом:
1. Определение шаблона
Режим наблюдателя, также известный как режим публикации/подписки. Паттерн наблюдателя определяет зависимость от одного ко многим между объектами. Когда состояние объекта меняется, все объекты, которые зависят от него, уведомляются и автоматически обновляются.
2. Примеры модели
1 Анализ шаблона
Мы заимствуем предупреждение о высокой температуре метеорологического бюро, чтобы проиллюстрировать эту модель.
2 Статическая схема наблюдателя статическая классная диаграмма
3 примеры кода
3.1 Interface-Interface-Iobserver
Пакет com.demo.observer; import com.demo.subject.isubject;/** * inbeserver interface * @author * */public interface iobserver {// method inpublic void update (субъект isubject);}3.2 Тема интерфейса-изобилия
пакет com.demo.subject; import com.demo.observer.iobserver;/** * Интерфейс темы (наблюдатель) * * @author * */public isubject {/** * add stemver * * @param ebserver * @return */public boolean add (iobserver observer); / ** * Удалить наблюдатель * * @param stemver * @return */ public boolean remove (iobserver stemver); / *** Уведомление всех наблюдателей об обновлении данных*/ public void notifyallobserver (); / ** * Установите значение температуры * * @param температура */ public void settlemperaturation (температура плавания); / ** * Получите предупреждение о температуре * * @return */ public String Demporaturereport ();}3.3 Реализация предмета в определенные темы
Пакет com.demo.subject; import java.util.iterator; import java.util.vector; import com.demo.observer.iobserver;/** * Класс реализации темы (наблюдатель) * * @author * * */Общедоступный. Субъект. Стандарт. последовательные дни. * * (2) Сигнал предупреждения о апельсине высокой температуры * * Стандарт: максимальная температура увеличится до 37 ℃ в течение 24 часов. * * (Iii) Сигнал предупреждения о высокой температуре * * Стандарт: максимальная температура повысится до 40 ℃ в течение 24 часов. */ Частная температура поплавки; // Уровень раннего предупреждения частная строка Warninglevel; // Сохранить список наблюдателей частного окончательного вектора <iobserver> Vector; / *** Метод построения инициализируйте список наблюдателей*/ public subject () {vector = new Vector <iobserver> (); } / *** Добавить наблюдатель* / public boolean add (iobserver stemver) {if (stemver! = Null &&! Vector.contains (stemver)) {return vector.add (stecerver); } вернуть false; } / *** Удалить наблюдатель* / public boolean remove (iobserver stemver) {return vector.remove (stemver); } / *** Уведомление всех наблюдателей об обновлении данных* / public void notifyallobserver () {system.out.println ("======================================================= (iterator.hasnext ()) {(iterator.next ()). Update (this); = «Желтый»; */ Публичная пустота (температура плавания) {this.temperation = температура;3.4 Персональный наблюдатель-PersonObserver
пакет com.demo.observer; import com.demo.subject.isubject;/** * Индивидуальный пользовательский наблюдатель * @author * */public class personobserver реализует iobserver {public void update (isubject subject) {System.out.println ("Люди получают высокую температуру:" + puctome.temperatorareport (); }}3.5 Правительственный наблюдатель-губернатор
пакет com.demo.observer; import com.demo.subject.isubject;/** * Наблюдатель правительства * @author * *//public Class PulforgeObserver реализует iobserver {public void update (isubject subject) {System.out.println («Государственный департамент получил высокую температуру предупреждения:» + pacty.temperatoreport (); }}3.6 CompanyObserver
пакет com.demo.observer; import com.demo.subject.isubject;/** * Enterprise and Institutions Пользовательский наблюдатель * @author * */public Class CompanyObserver внедряет IOBServer {Public void Update (Isubject Subject) {System.out.println («Enterprises и учреждения получают высокую температуру Wearning:" + subseporteport ("Enterprises and Instentions }}3.7 Пусть система начнет запускать клиент
пакет com.demo; import java.util.random; import com.demo.observer.companyobserver; import com.demo.observer.governmentobserver; import com.demo.observer.personobserver; import com.demo.subject.isubject @author * */public class client {/** * @param args */public static void main (string [] args) {// Создание объекта темы isubject subject = new Subject (); // Добавить наблюдателя предприятия и учреждения. // Добавить наблюдателя государственного пользователя. // Добавить наблюдателя отдельного пользовательского субъекта. ADD (New PersonObserver ()); Случайный случайный = new Random (); int i = 0; while (++ i <10) {// установить случайную температуру субъект. Settemperature (random.nextint (45)); }}}4 Результаты работы
======== Метеорологическое отделение выпускает желтую высокотемпературную тревогу! ======
Предприятия и учреждения получают высокую температуру предупреждение: температура: 35,0
Правительственные ведомства получили высокую температуру предупреждение: температура: 35,0
Люди получают высокую температуру предупреждение: температура: 35,0
======== Метеорологическое отделение выпускает красную тревогу для высокой температуры! =======
Предприятия и учреждения получают высокую температуру предупреждение: температура: 43,0
Правительственные ведомства получили высокую температуру предупреждение: температура: 43,0
Люди получают высокую температуру предупреждение: температура: 43,0
======== Метеорологическое отделение выпускает апельсин с высокой температурой! =========================
Предприятия и учреждения получают высокую температуру предупреждение: температура: 37,0
Правительственные департаменты получили высокую температуру предупреждение: температура: 37,0
Люди получают высокую температуру предупреждение: температура: 37,0
3. Принципы дизайна этой модели
1 «открытый» принцип
2 Принцип единой ответственности
3. Принцип инверсии зависимости
4. Используйте случаи
1 Когда абстрактная модель имеет два аспекта, один из которых зависит от другого, и должна быть инкапсулирована в независимые объекты и независимо изменяется и мультиплексирует друг друга.
2 Когда изменение объекта в системе требует изменения содержания других объектов одновременно, но вы не знаете, сколько объектов нужно изменить.
3 Когда изменение объекта должно быть уведомлено на другие объекты, чтобы внести соответствующие изменения, но невозможно определить, кого объект уведомляется.
5. «Статическая классовая диаграмма« Получить данные »
Так называемые «толкающие данные» означает, что при изменении наблюдаемого объекта соответствующие данные передаются наблюдателю посредством параметров, которые образуют наблюдатель «наталкивание данных» для наблюдателя. Статическая классовая диаграмма выглядит следующим образом:
6. Статическая классовая диаграмма «Получить данные»
Так называемые «данные о привлечении», объект наблюдателя содержит ссылку на экземпляр наблюдаемого объекта. При изменении объекта изменяется, данные об наблюдателе не будут переданы. Наблюдатель активно получает соответствующие данные, основанные на ссылке наблюдаемого объекта. Это формирует наблюдатель активно «получает данные» из наблюдаемого объекта. Статическая классовая диаграмма выглядит следующим образом:
Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Введение и расширенное учебное пособие по объектно-ориентированному программам Java», «Учебное пособие по структуре данных Java и алгоритм», «Суммарной навыки Java Dom Node», «Суммируют навыки работы навыков операции Java File File и Directory» и «Summary of Java CACEE CACEE».
Я надеюсь, что эта статья будет полезна для всех Java Programming.