ООП для чайников. Паттерны проектирования. Паттерн стратегия (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


Bookmark and Share