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

}

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.