Latest web development tutorials

Посетитель Pattern

В структуре посетителей (Посетитель Pattern), мы используем класс посетителя, он изменяет классы алгоритм выполнения элементов. Таким образом, при реализации алгоритма может быть изменен элемент посетителя. Этот тип шаблонов проектирования относятся поведенческие модели. Согласно модели, элемент из объектов принял целевых посетителей, так что посетители могут обрабатывать объекты, действующие объект элемента.

введение

Цель: Основная структура разделения манипулирования данными и данными.

Главным образом решить: стабильную структуру данных и переменную проблему с операционной муфты.

Когда использовать: необходимость создания целевой структуры объектов в самых разных и не связанных между собой действий, но эти действия должны избегать "загрязнения" класса этих объектов, использование посетителей этих пакетов к классу.

Как исправить: класс доступен внутри плюс прием иностранных посетителей , чтобы обеспечить интерфейс.

Ключевой код: база данных класса , который имеет метод , чтобы принимать посетителей, само по себе ссылка на входящих посетителей.

Пример применения: Вы являетесь гостем в доме друга, вы гость, друг принимает ваш визит через описание вашего друга, то описание друга , чтобы вынести решение, которое является паттерн посетитель.

Преимущества: 1, в соответствии с единым принципом ответственности.2, отличная масштабируемость. 3, гибкость.

Недостатки: 1, конкретные элементы посетителю обнародовали подробности о нарушении принципа Деметры.2, конкретные элементы изменения более трудным. 3, в нарушение принципа инверсии зависимостей, полагаться на определенный класс, который не полагается на абстракции.

Сценарии использования: 1, объект , соответствующий структуре объекта класса меняется редко, но часто необходимо определить новую операцию на этом объекте структуры.2, потребность в целевой структуры объектов в самых разных и не связанных между собой действий, но эти действия должны избегать "загрязнения" класса этих объектов, мы не хотим, чтобы изменить эти классы, когда вы добавляете новую операцию.

Примечание: Посетители могут быть объединены функции, вы можете сделать отчет, UI, перехватывать и фильтр.

реализация

Мы создадим определение приемлемого интерфейса операцииComputerPart.Клавиатура, мышь, монитор икомпьютердостичьComputerPartинтерфейса классов сущностей. Мы определим другой интерфейсComputerPartVisitor,который определяет тип операции для посетителей.Компьютериспользуют посетителей Entity принять соответствующие меры.

VisitorPatternDemo,мы продемонстрировать использование классаComputer,классаComputerPartVisitor, чтобы продемонстрировать использование шаблона для посетителей.

паттерн посетитель UML диаграмма

Шаг 1

Определить интерфейс, представляющий элемент.

ComputerPart.java

класс открытый интерфейс ComputerPart {
   общественного недействительными принимают (ComputerPartVisitor computerPartVisitor);
}

Шаг 2

Создание расширяет классы сущностей выше класса.

Keyboard.java

Открытый класс Клавиатура реализует ComputerPart {

   @Override
   общественного недействительными принимают (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (это);
   }
}

Monitor.java

Открытый класс Monitor реализует ComputerPart {

   @Override
   общественного недействительными принимают (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (это);
   }
}

Mouse.java

Открытый класс Mouse реализует ComputerPart {

   @Override
   общественного недействительными принимают (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (это);
   }
}

Computer.java

Открытый класс Компьютер реализует ComputerPart {
	
   ComputerPart [] части;

   общественного компьютера () {
      детали = новый ComputerPart [] {новый Mouse (), новая клавиатура (), новый монитор ()};		
   } 


   @Override
   общественного недействительными принимают (ComputerPartVisitor computerPartVisitor) {
      для (INT I = 0; я <parts.length; я ++) {
         части [я] Признавайте (computerPartVisitor);
      }
      computerPartVisitor.visit (это);
   }
}

Шаг 3

Определение интерфейса представление посетителя.

ComputerPartVisitor.java

Открытый интерфейс ComputerPartVisitor {
	общественного недействительными визит (Computer компьютер);
	общественного недействительными посещения (Мышь мыши);
	общественного недействительными посещения (клавиатура клавиатуры);
	общественного недействительными визит (монитор монитора);
}

Шаг 4

Посетители лицо, созданное для достижения указанного класса.

ComputerPartDisplayVisitor.java

Открытый класс ComputerPartDisplayVisitor реализует ComputerPartVisitor {

   @Override
   общественного недействительными визит (Computer компьютер) {
      System.out.println ( "Отображение компьютера.");
   }

   @Override
   общественного недействительными посещения (Мышь) {
      System.out.println ( "Отображение мыши.");
   }

   @Override
   общественного недействительными посещения (клавиатура клавиатуры) {
      System.out.println ( "Отображение клавиатуры.");
   }

   @Override
   общественного недействительными визит (монитор монитора) {
      System.out.println ( "Отображение монитора.");
   }
}

Шаг 5

ИспользуйтеComputerPartDisplayVisitor, чтобы показать частькомпьютера.

VisitorPatternDemo.java

Открытый класс VisitorPatternDemo {
   государственной статической силы основных (String []) {агдз

      ComputerPart компьютер = новый компьютер ();
      computer.accept (новый ComputerPartDisplayVisitor ());
   }
}

Шаг 6

Проверьте выход.

Отображение мыши.
Отображение клавиатуры.
Отображение монитора.
Отображение компьютера.