ООП для чайников. Паттерны проектирования. Паттерн стратегия (Strategy)

Паттерн стратегия используется для сокрытия (инкапсуляции) алгоритмов. То есть, у вас есть несколько путей решения одной и той же проблемы — сортировки строк, например, но они очень отличаются в производительности, требованиям к ресурсам и проч. Для этого вы реализуете несколько алгоритмов сортировки:

  1. Cортировку вставками (Insertion sort), сортирующую за конечное время и эффективному при небольших массивах, а также с частично отсортированными массивами
  2. Быструю сортировку (Quicksort), сортирующую быстрее, но требующую O(log n) дополнительной памяти
  3. Сортировку подсчетом (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;
	}

}

Comments

comments

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

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

Что заставило меня создать его?

Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: