ПредишенСледващото

Изпълняването на новите изисквания на клиента, ние виждаме ползите от архитектурата на базата на интерфейси. За да добавите възможността да се абонирате за юридически лица, ние трябва само да създадете клас Company. Единственото нещо, което той се противопоставя от първия пример с това, че също така прилага Subsciber интерфейс.

Ние не трябва да се промени класа на издателя. От факта, че тя използва абстракция на абоната.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Наблюдател - наблюдателя (дизайн модели), тя сфера

Изход към екрана е различен от първия пример. Надявам се, че не е необходимо да се обясни, че този код е по-точен и по-лесно да го поддържа.

Сега нека да поговорим за тази теория модел.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Обърнете внимание на графиката. Тези, които се абонират за класовете, наречени теми и тези, които се абонирате, наречени наблюдатели. В нашия пример, темата беше абонаментното интерфейс, както и наблюдатели бяха Абонат интерфейс. Съответно, тяхното изпълнение беше ConcreteSubject и ConcreteObserver

На Тема схема може да бъде клас или интерфейс. Вариант, когато тя е по-гъвкав интерфейс, поне в Java това. Причината за това е, че в Java не може да бъде множествено наследяване. Тема Ако вашият клас е вече потомък на някой друг, тя налага някои ограничения върху вас. Такива ограничения не, ако работят с интерфейса.

Наблюдател може да бъде и клас или интерфейс, със същите последици.

Не е задължително много точно да следват образеца за UML схема. Ние не искате да получите ползите, а не копира схемата в кода. Не оставям връзки към конкретни теми, приложения на наблюдателя, както се прави в диаграмата. Вижте пунктираната линия на ConcreteObserver. И да не се създава получите / метод setState ConcreteSubject.

Не забравяйте, че обектът не се знае нищо за изпълнението на наблюдателите.

Моделът на Наблюдател определя отношението на "един към много отношения" между обекти.

Една тема - много наблюдатели.

Така, че промяната на състоянието на един обект е автоматично предупреждение и актуализиране на всички зависими обекти.

Зависими обекти са наблюдатели.

  1. Единственото нещо, което той знаеше, предмет на наблюдателя е, че тя изпълнява интерфейс Observer. Това ни дава възможност да се добавят нови видове наблюдатели, без да променяте темата.
  2. Нови наблюдатели да се абонирате и да прекратят абонамента си получавате актуализации по всяко време.
  3. Предметът и на наблюдателя може да се използва повторно.
  4. Промяна на една не влияе на другия.

Аз ще добавя по-горе от факта, че работата на кода не трябва да зависи от реда на наблюдатели за предупреждение.

В Java, има вграден модел podderzhkadannogo

Тя java.util.Observable клас, разширяване на своите поданици. Вече говорихме за ограниченията, които налага на нас в изпълнението на наследството чрез класа. И все пак има java.util.Observer, интерфейс за наблюдатели.

Нека да отмените последното нашия пример, така че той използва класа на данни и интерфейса.

Първото нещо, което правим, е да премахнете нашите интерфейси.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Наблюдател - наблюдателя (дизайн модели), тя сфера

Уроци Company и лице в момента се изпълнява интерфейс Observer. метод Актуализация на втори параметър получи препратка към регистъра на обект.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Клас издател вече не е отговорен за записване и отписват. Всички тези методи са в неговия предшественик. Това е добра новина, защото ние сега не е нужно да ги приложат на техните собствени. Особено, защото тези методи са синхронизирани. За да направим нещата работят, ние също трябва да запомните за setChanged метод, който превключва състоянието на класа в режим "Редактиране". Ако това не бъде направено, наблюдателите няма да получават актуализации.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Изход към екрана е същото като предишните примери.

В JDK, има няколко такива класове и интерфейси. Така например, в класа java.beans.PropertyChangeSupport и java.beans.PropertyChangeListener интерфейс

Ако не се мързеливи, погледнете за себе си.

Друг вид на наблюдатели

Ако нашите редактори освободени още и вестници, бихме могли да се приложи модел малко по-различно. С цел да се осигури по-голяма гъвкавост на нашите класове. Наблюдатели могат да получат нито един вестник или списание. Само за това те трябва да направи искане чрез съответен кариерист.

Наблюдател - наблюдателя (дизайн модели), тя сфера

Наблюдател - наблюдателя (дизайн модели), тя сфера

Например един човек пише само списания, но компанията само вестник. Това може да бъде постигнато, без да използвате Java-тират реализация на този шаблон. Например, минаваща позоваване на всеки наблюдател на публикуване. Напълно код няма да доведе, опитайте се да го приложат сами.

Четете книги, досега!

Свързани статии

Подкрепете проекта - споделете линка, благодаря!