ООП для чайников. Паттерны проектирования. Паттерн стратегия (Strategy)
Паттерн стратегия используется для сокрытия (инкапсуляции) алгоритмов. То есть, у вас есть несколько путей решения одной и той же проблемы — сортировки строк, например, но они очень отличаются в производительности, требованиям к ресурсам и проч. Для этого вы реализуете несколько алгоритмов сортировки:
- Cортировку вставками (Insertion sort), сортирующую за конечное время и эффективному при небольших массивах, а также с частично отсортированными массивами
- Быструю сортировку (Quicksort), сортирующую быстрее, но требующую O(log n) дополнительной памяти
- Сортировку подсчетом (Counting sort), эффективный для большого количества данных с небольшим разбросом значений
Далее, в зависимости от типа данных что у нас есть, и их объема, решаем какой алгоритм предпочтительнее использовать.
Вот как паттерн Стратегия, выглядит на UML диаграмме:
А вот пример на языке java, из уже классической, игровой тематики:
// IUnitRender.java package patterns.strategy; public interface IUnitRender { public void render(); } // UnitRender2D.java package patterns.strategy; public class UnitRender2D implements IUnitRender { @Override public void render() { System.out.println("2D unit"); } } // UnitRender3D.java package patterns.strategy; public class UnitRender3D implements IUnitRender { @Override public void render() { System.out.println("3D unit"); } } // UnitSprite package patterns.strategy; public class UnitSprite { private IUnitRender render; public UnitSprite(IUnitRender render) { this.render = render; } public void render() { render.render(); } } // TestApp.java package patterns.strategy; public class TestApp { public static void main(String[] args) { UnitSprite unit; if(TestApp.hasVideoAdapter()) { unit = new UnitSprite(new UnitRender3D()); } else { unit = new UnitSprite(new UnitRender2D()); } unit.render(); } public static Boolean hasVideoAdapter() { return true; } }
О статье
Вы сейчас читаете статью «ООП для чайников. Паттерны проектирования. Паттерн стратегия (Strategy)»
- Написанную:
- 01.06.2010
- Категории:
- oop, programming

Нет комментариев
Перейти к форме добавления комментария | comments rss[?] | trackback uri [?]