Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Template Method

Читайте также:
  1. Acceptance. Methods of acceptance
  2. Attitude, Methodology & Technology.
  3. Benefits of Knowing Research and Research Methods
  4. Boiling-point method for calibrating a thermometer
  5. Choose and describe control method for the field.
  6. Chronological resume template (pipe line and oil field construction specialist)
  7. Direct method

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

 

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

Visitor

Обеспечивает простой и удобный способ выполнения неких операций для определённого семейства классов. Это достигается путём централизации с помощью данного шаблона возможных вариантов поведения, что позволяет модифицироваь или расширять их, не затрагивая классы, на которые распространяются эти варианты поведения.

Этот шаблон может использоваться например в следующей ситуации. Допустим ConcreteElementA и ConcreteElementB представлены классами типа Circle и Square. Необходимо вычислять их площать. При этом есть потребность вынести операцию вычисления площади за пределы класса. (Например, при наличии нескольких операций которые можно добавлять или удалять динамически.) Оба класса экспортируют свойства, первый – радиус, сторой – размер стороны. Пусть за операцию вычисления площади отвечает ConcreteVisitorA, тогда его код быть иметь вид:

 

public class AreaVisitor implements Visitor{

 

private float totalArea = 0;

 

public void visit(Element element){

if(element instanceof Square){

Square square = (Square)element;

totalArea += square.side()*square.side();

}else if(element instanceof Circle){

Circle circle = (Circle)element;

totalArea += 3.14 * circle.radius()*circle.raduis();

}else{

System.out.println(“Unknown Element, ignoring it”);

}

}

}

 

 

При этом видно, что класс AreaVisitor зависит от классов с которыми он может работать (так как напрямую приводит к их типу). Вообще говоря приведение интерфейса к типу является нежелательным подходом при проектировании, однако, такой трибуты позволяет выделить и добавлять операции к элементам не меняя их кода. Например, не меняя кода можно добавить операцию отрисовки на экране заданной коллекции элементов. Если состав типов элементов фиксирован (например, нам известно, что в нашей модели могут быть только Circle и Square), то можно использовать перегрузку методов, вместо явного приведения и неудобных операций if(...){...}else.

 

 


Дата добавления: 2015-10-24; просмотров: 109 | Нарушение авторских прав


Читайте в этой же книге: Введение в UML. Краткая историческая справка. Диаграммы классов, диаграммы последовательностей. | Лекция 2. Основные определения ООП. | Мобильные агенты (Applets and other mobile code) | Введение в Web-приложения и сервлеты | Гранулярность (granularity) | Factory Method | Аспектно-Ориентированное Программирование (Aspect Oriented Programming, AOP) | Подходы к межсистемной интеграции | Интеграция с помощью разделяемой базы данных | Каналы и Фильтры |
<== предыдущая страница | следующая страница ==>
Abstract Factory| Структурные шаблоны

mybiblioteka.su - 2015-2024 год. (0.007 сек.)