Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемАндрей Проводин
1 Язык программирования Java Дмитриев Андрей Владиславович 2007
2 Посетитель Представляет операцию, которую надо выполнить над элементами объекта. Позволяет определить новую операцию, не меняя классы элементов, к которым он применяется. Применяется: при необходимости обработать одинаковые данные, находящиеся в объектах с разными интерфейсами; при расширении существующей библиотеки (при невозможности ее редактировать).
3 Посетитель Каждый из доступных классов реализует метод public void accept(Visitor v){ v.visit(this); }
4 Посетитель (cont.) public class Employee { private int vacDays; private String name; public void accept(Visitor v) { v.visit(this); } public Employee(String name, int vd) { vacDays = sd; this.name = name; }
5 Посетитель (cont.) public abstract class Visitor { public abstract void visit(Employee emp); public abstract void visit(Boss emp); }
6 Посетитель (cont.) public class VacationVisitor extends Visitor { protected int total_days; public VacationVisitor() { total_days = 0; } public void visit(Employee emp) { total_days += emp.getVacDays(); } public void visit(Boss boss) { total_days += boss.getVacDays(); }
7 Посетитель (cont.) VacationVisitor vac = new VacationVisitor(); for (int i = 0; i < employees.length; i++) { employees[i].accept(vac); } System.out.println(vac.getTotalDays());
8 Посетитель (cont.) public class Boss extends Employee { private int bonusDays; public Boss(String name, int vacdays) { super(name,vacdays); } public void accept(Visitor v) { v.visit(this); }
9 Посетитель (cont.) public class VacationVisitor extends Visitor { protected int total_days; public VacationVisitor() { total_days = 0; } public void visit(Employee emp) { total_days += emp.getVacDays(); } public void visit(Boss boss) { total_days += boss.getVacDays(); total_days += boss.getBonusDays(); }
10 Посетитель (cont.) public void visit (Employee emp) { total_days += emp.getVacDays(); // проверка сущности if(emp instanceof Manager) { total_days += ((Manager)emp).getBonusDays (); }
11 Посетитель (Выводы)
12 Правда ли что… Класс-заместитель может не иметь корректной ссылки на целевой класс? Класс-одиночка не может иметь публичного конструктора? Паттерн Посетитель делает обратные вызовы к классу-посетителю?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.