23 Режимы дизайна 20: промежуточная модель Java
Определение: инкапсулировать серию объектных взаимодействий с объектом -посредником. Посредник заставляет каждый объект взаимодействовать без отображения, тем самым ослабляя связь и независимо изменяя взаимодействие между ними.
Тип: поведенческий паттерн
Классовая диаграмма:
Структура промежуточной модели
Режим посредника также называется режимом медиатора. С классовой диаграммы он разделен на 3 части:
Абстрактный медиатор: Определите интерфейс между объектами класса коллеги и объектами посредников и используется для связи между каждым классом коллеги. Как правило, он включает в себя один или несколько абстрактных методов событий и реализуется подклассами.
Промежуточный класс реализации: унаследован от абстрактных медиаторов и реализует методы событий, определенные в абстрактных медиаторах. Получить сообщения от одного класса коллеги, а затем влиять на другие одновременные классы через сообщение.
Класс коллеги: если объект влияет на другие объекты, а также влияет другие объекты, то эти два объекта называются классами коллеги. На классной диаграмме есть только один класс коллеги, который на самом деле является упущением реальности. В практических приложениях класс коллеги, как правило, состоит из нескольких, и они влияют и зависят друг от друга. Чем больше их коллеги, тем сложнее отношения. Более того, класс коллеги также может быть представлен как набор реализаций, унаследовавших один и тот же класс абстрактного. В посреднической модели сообщение должно передаваться через посредников между коллегами.
Зачем использовать промежуточную модель
Вообще говоря, отношения между классами коллеги являются относительно сложными. Когда несколько классов коллеги коррелируют, их отношения будут выглядеть как сложная структура сетки. Это чрезмерная архитектура, то есть она не способствует повторному использованию класса и не является стабильной. Например, на рисунке ниже, есть шесть объектов, похожих на коллегу. Если объект 1 изменится, 4 объекта будут затронуты. Если объект 2 изменится, то 5 объектов будут затронуты. Другими словами, дизайн прямой корреляции между коллегами не очень хорош.
Если введена посредническая модель, взаимосвязь между классами коллеги станет звездной структурой. Из рисунка мы видим, что изменения в любом классе будут влиять только на сам класс и посредник, что уменьшит связь системы. Хороший дизайн определенно не будет инкапсулировать всю логику обработки объектов в этом классе, но будет использовать специальный класс для управления поведением, которое не принадлежит вам.
Давайте используем пример, чтобы проиллюстрировать, что такое класс коллеги: есть два класса A и B, каждый из которых имеет номер, и мы должны убедиться, что числа в классе B всегда в 100 раз превышают числа в классе A., то есть при изменении количества класса A, умножая число на 100 и присваивая его классу B, и при изменении класса B разделите число на 100 и присваивание класса A. Код заключается в следующем:
Abstract Class AbstractColleage {защищенный int №; public int getNumber () {return №; } public void setNumber (int number) {this.number = number; } // Аннотация Метод, изменить связанный объект одновременно при изменении чисел публичный абстрактный void setnumber (int number, retableccolleague coll); } Class Colleagaea Extrable AbstractColleague {public void setNumber (int №, AbstractColleague Coll) {this.number = number; coll.setnumber (номер*100); }} Class Colleguagueb Extends AbstractColleague {public void setNumber (int number, AbstractColleague Coll) {this.number = number; coll.setnumber (номер/100); }} public Class Client {public static void main (string [] args) {AbstractColleague colla = new Colleagaea (); AbstractColleague Collb = new Collegueb (); System.out.println ("========================================================================= ======================================================================= ======================================================================= ======================================================================== ======================================================================= ======================================================================= ======================================================================= ======================================================================== System.out.println ("Значение номера Collb:"+collb.getnumber ()); В приведенном выше коде класс A и B связаны через прямую ассоциацию. Если мы хотим использовать промежуточную модель, класс A и B не могут быть напрямую. Они должны использовать посредник для достижения цели ассоциации.
Abstract Class AbstractColleage {защищенный int №; public int getNumber () {return №; } public void setNumber (int number) {this.number = number; } // Обратите внимание, что параметры здесь больше не являются коллегами, а посредник общественного абстрактного абстрактного void setNumber (int number, AbstractMediator AM); } Class Colleagaea Extrable AbstractColleague {public void setNumber (int №, AbstractMedior am) {this.number = number; am.aaffectb (); }} Class Collegueb Extends AbstractColleague {@Override public void setNumber (int number, AbstractMediator am) {this.number = number; am.baffecta (); }} абстрактный класс AbstractMediator {Protected AbstractColleague A; Защищенный AbstractColleague B; Public AbstractMediator (AbstractColleague A, AbstractColleague B) {a = a; B = b; } public Abstract void aaffectb (); Public Abstract void Baffecta (); } класс медиатор расширяет AbstractMediator {public Mediator (AbstractColleague A, AbstractColleague B) {Super (A, B); } // Обработка влияния a на b public void aaffectb () {int number = a.getnumber (); B.setnumber (число*100); } // Обработка влияния b на публичную void baffecta () {int number = b.getnumber (); A.SetNumber (номер/100); }} public Class Client {public static void main (string [] args) {AbstractColleague colla = new Colleagaea (); AbstractColleague Collb = new Collegueb (); AbstractMediator Am = новый посредник (колла, коллб); System.out.println ("======================= A ========================================================================================================== ========================================================================================== ========================================================================================== ============================================================================================ System.out.println ("Значение номера колла:"+colla.getnumber ()); B ======================================================================================== ======================================================================================== ======================================================================================== ======================================================================================== System.out.println ("Число Collb -"+collb.getnumber ());Хотя код относительно длинный, его все еще относительно легко понять. Фактически, именно для переупаковки кода, которое первоначально обрабатывает отношения объектов в класс посредничества, и обрабатывать отношения между объектами через этот класс посредничества.
Преимущества промежуточной модели
1. Соответствующее использование промежуточной модели может избежать чрезмерной связи между классами коллеги, чтобы каждый класс коллеги мог использоваться относительно независимо.
2. Использование шаблона посредника может превратить отношения один ко многим между объектами в отношения один к одному, что облегчает взаимосвязь между объектами и поддерживать.
3. Использование промежуточной модели может абстрагировать поведение и сотрудничество объектов и может более гибко обрабатывать взаимодействия между объектами.
Применимые сценарии
В объектно-ориентированном программировании класс неизбежно будет зависеть от других классов, а совершенно независимые классы бессмысленно. Класс также довольно часто полагаться на несколько классов одновременно. Поскольку такая ситуация существует, это означает, что зависимость от одного до многих имеет свою рациональность. Соответствующее использование шаблона посредника может прояснить изначально грязные отношения объекта, но если он подвергается злоупотреблениям, это может привести к негативным последствиям. Вообще говоря, модель медиатора рассматривается только для взаимосвязи между классами коллег, где существует структура сетки. Структура сетки может быть преобразована в звездную структуру, чтобы прояснить связь между коллегами.
Промежуточная модель представляет собой относительно распространенную модель и относительно простую модель, связанную с злоупотреблением. В большинстве случаев взаимосвязь между классами коллеги не будет сложной с хаотической структурой сетки. Следовательно, в большинстве случаев можно инкапсулировать зависимости между объектами в классе коллеги, и нет необходимости вводить промежуточную модель. Злоупотребление промежуточной моделью только усложнит ситуацию.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.