Посредничная модель
Объектно-ориентированный дизайн поощряет распространение поведения по объектам, что может привести ко многим связям между объектами. В худшем случае каждый объект должен знать все другие объекты.
Несмотря на то, что разделение системы на многие объекты может улучшить повторное использование, всплеск взаимосвязанных объектов уменьшит его повторное использование. Большое количество отношений с подключением делает невозможным, чтобы объект работал без помощи других объектов (система проявляется в качестве неделимого целого), и в настоящее время трудно внести какие -либо серьезные изменения в поведение системы. Поскольку поведение распределяется среди многих объектов, в результате необходимо определить многие подклассы для настройки поведения системы. Поэтому мы представили посредник объекта -посредника :
Через посредничный объект система структуры сетки может быть преобразована в звездную структуру, сосредоточенную на посредниках . Каждый конкретный объект больше не имеет прямой связи с другим объектом, но опосредован от него через посредник. Введение посреднического объекта также делает структуру системы не подвергаться большому количеству модификаций из -за введения новых объектов.
Медиаторный режим: также известный как режим медиатора , использует объект медиатора для инкапсуляции взаимодействия ряда объектов, чтобы каждый объект не нуждался в отображении и ссылке друг на друга, тем самым ослабляя связь и независимо изменяя свои взаимодействия :
(Источник изображения: шаблон проектирования: основа многоразового объектно-ориентированного программного обеспечения) Советы: Каждый коллега знает только существование медиатора и не нужно знать, существуют ли другие коллеги (или как их отделять). Он должен только отправить сообщение посреднику, а затем направить его другим коллегам ( посредник хранит все отношения коллеги , и только посредник знает, сколько/какие коллеги там).
Режим реализации
Организация Объединенных Наций продвигает заявления из разных стран и опосредует отношения с каждой страной:
Государства отправляют и получают сообщения в Совет Безопасности ООН, которые «надлежащим образом» направляют запросы между государствами на совместные действия:
Колледж
Аннотация Класс коллеги, определите публичные методы каждого коллеги:
/** * @author jifang * @since 16/8/28 16:22. */Public Abstract Class Country {защищенные Unitednations Mediator; Приватное название строки; Общественная страна (Unitednations Mediator, название строки) {this.Mediator = Mediator; this.name = name; } public String getName () {return name; } защищенный абстрактный void declare (String msg); Защищенный абстрактный void получение (строка MSG);}----------------------------------------------------------------------------------
ConceteColleague
Конкретные коллеги:
• Каждый класс коллеги знает свой объект посредника.
• Каждый объект коллеги общается со своим посредником, когда ему необходимо общаться с другими коллегами.
Class USA расширяет страну {public usa (Unitednations Mediator, String name) {Super (Mediator, имя); } @Override public void declare (String msg) {mediator.declare (this, msg); } @Override public void cheach (String msg) {System.out.println ("Соединенные Штаты получены: [" + msg + "]"); }} класс Iraq Extends Country {public Iraq (Unitednations Mediator, String name) {super (mediator, name); } @Override public void declare (String msg) {mediator.declare (this, msg); } @Override public void cheach (String msg) {System.out.println ("Ирак получил: [" + msg + "]"); }} класс China Extends Country {public China (Unitednations Mediator, String name) {super (Mediator, name); } @Override public void declare (String msg) {mediator.declare (this, msg); } @Override public void cheach (String msg) {System.out.println ("Китай получен: [" + msg + "]"); }}----------------------------------------------------------------------------------
Посредник
Аннотация посредника: определите интерфейс для общения с объектами коллеги:
Общественный абстрактный класс Unitednations {Protected List <Country> страны = новый LinkedList <> (); Public void Register (страна страны) {страны. Адд (страна); } public void remove (страна страна) {ounds.remove (страна); } Защищенный абстрактный Declare (страна страна, строка MSG);}----------------------------------------------------------------------------------
Бетонеедиатор
Конкретный посредник:
• понимать и поддерживать своих отдельных коллег;
• Реализуйте совместное поведение, координируя каждый объект коллеги (получайте сообщения от коллег и выпустите заказы конкретным коллегам).
Class UnitedationsSecurityCouncil расширяет Unitednations { / ** * Совет Безопасности опосредует в середине * * @param страна * @param msg * / @override защищенное декларация (страна страна, строка msg) {for (country tocountry: страны) {if (! tocountry.equals (country)) {String nelak = ountry. grongetname (); tocountry.receive (имя + "Скажи мирно:" + msg); }}}} Если удлинения нет, посредник может быть объединен с бетоном в один.
• Клиент
Public Class Client {@test public void client () {Unitednations Mediator = new UnitednationsSecurityCouncil (); Country USA = новый США (посредник, «США»); Страна Китай = Новый Китай (посредник, «Китай»); Страна Ирак = новый Ирак (посредник, «Ирак»); Mediator.register (США); Mediator.register (Китай); Mediator.register (Ирак); USA.Declare («Я хочу напасть на Ирак, кого волнует, кто я спешу !!!»); System.out.println ("----------------"); China.clare («Мы решительно осуждаем !!!»); System.out.println ("-----------------------"); Ирак }}----------------------------------------------------------------------------------
краткое содержание
Появление посредника уменьшает связь между каждым колледжем, позволяя коллеге и посреднику быть независимо измененными и повторно использованными. Поскольку объекты сотрудничают, посредничество принимается как независимая концепция и инкапсулируется в объект, фокус внимания смещается от поведения каждого из самих объектов к взаимодействию между ними, так что систему можно рассматривать с более макро -точки зрения.
• Применимость
Промежуточная модель легко применять в системе и легко неправильно используется в системе. Когда в системе появляется комплексная группа «много-ко-ко многим», не спешите использовать посредника. Лучше всего сначала подумать о том, является ли дизайн системы разумной. Поскольку Concretemediator контролирует централизацию, сложность взаимодействия становится сложностью посредника, что делает посредник более сложным, чем любой ConceteCollegeague. Рекомендуется использовать промежуточную модель в следующих ситуациях:
◦ Группа объектов общается четко определенным, но сложным образом. Полученные взаимозависимости сбивают с толку и трудно понять.
◦ Объект относится ко многим другим объектам и напрямую общается с этими объектами, что затрудняет повторное использование объекта.
◦ Хотите настроить поведение, распространяемое между несколькими классами, но не хочу генерировать слишком много подклассов.
• Связанные режимы
Facade отличается от медиаторов тем, что она абстрагирует подсистему объекта, что обеспечивает более удобный интерфейс. Его протокол является однонаправленным, то есть фасадными объектами делают запросы в этот класс подсистемы, но в противном случае не могут. Напротив, Mediator обеспечивает сотрудничество, которое не поддерживается или не может поддерживаться каждым объектом колледжа, а протокол является многонаправленным.
° Colleague может общаться с посредником с помощью режима наблюдателя.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.