Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемimprove-it.org
1 Программная инженерия Андрей Дмитриев ©
2 Шаблоны проектирования
3 Стратегия Определяет семейство алгоритмов, инкапсулируя их все и позволяя подставлять один вместо другого во время исполнения программы. Каждый такой алгоритм представляет собой стратегию. Общность программного интерфейса позволяет использовать различные стратегии независимо от контекста их использования.
4 Стратегия public class Painter extends JComponent { public void paint(int x[], int y[]){ switch(tool){ case Tools.PEN: drawPenLine(x, y); break; case Tools.BRUSH: drawBrushLine(x, y); break; } … Графический пакет позволяет пользователю изменять инструмент рисования:
5 Стратегия (cont.) switch(tool){ case Tools.PEN: drawPenLine(); break; case Tools.BRUSH: drawBrushLine(); break; case Tools.SPRAY: drawSpray(); break; } … Расширение возможностей пакета требует внесения изменений в класс Painter:
6 Стратегия (cont.) public abstract class PaintStrategy { //конструктор public PaintStrategy(String title) {…} //обобщенный способ рисовать фигуры public abstract void paint(float x[], float y[]); } Данный подход может быть обобщен. Зададим общий интерфейс для рисования всех возможных фигур:
7 Стратегия (cont.) public class PenPaintStrategy { //конкретный способ рисовать фигуры public void paint(float x[], float y[]){ //отображение ломаной линии, соединяющей //данные точки } Теперь реализуем класс-стратегию, обладающую возможностью рисовать линии карандашом:
8 Стратегия (cont.) public class BrushPaintStrategy { public void paint(float x[], float y[]){ //отображение жирной линии, соединяющей //данные точки } Теперь реализуем класс-стратегию, обладающую возможностью рисовать линии кистью:
9 Стратегия (cont.) public class Painter extends JComponent { PaintStrategy currentStrategy = …; … public void paint(int x[], int y[]){ currentStrategy.paint(x, y); } … Главный класс должен всего лишь передать параметры (координаты точек) текущей стратегии:
10 Стратегия (выводы) Позволяет сосредоточить специфическую логику в рамках одной сущности В конкретной стратегии Упрощает расширение функциональности программы Ослабляет связность компонентов
11 Q&A
12 Спасибо! Андрей Дмитриев ©
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.