Strategy

Strategy
Название Стратегия
Английское название Strategy
Диаграмма
Представление структуры шаблона Strategy
Тип поведенческий
Назначение позволяет использовать различные бизнес-правила или алгоритмы в зависимости от контекста.
Применяется в случаях в одном и том же случае, в зависимости от текущего состояния системы или её окружения, используются различные алгоритмы.
Плюсы  
  • инкапсуляция реализации различных алгоритмов, система становится независимой от возможных изменений бизнес-правил;
  • вызов всех алгоритмов одним стандартным образом;
  • отказ от использования переключателей и/или условных операторов.
Минусы создание дополнительных классов
Родственные шаблоны Мост, Шаблонный метод, Адаптер

Стратегия, Strategy — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.

Содержание

Основные характеристики

Задача

Выбор алгоритма, который следует применить, в зависимости от типа выдавшего запрос клиента или обрабатываемых данных. Если используется правило, которое не подвержено изменениям, нет необходимости обращаться к шаблону «стратегия».

Мотивы

  • Программа должна обеспечивать различные варианты алгоритма или поведения
  • Нужно изменять поведение каждого экземпляра класса
  • Необходимо изменять поведение объектов на стадии выполнения
  • Введение интерфейса позволяет классам-клиентам ничего не знать о классах, реализующих этот интерфейс и инкапсулирующих в себе конкретные алгоритмы

Способ решения

Отделение процедуры выбора алгоритма от его реализации. Это позволяет сделать выбор на основании контекста.

Участники

  • Класс Strategy определяет как будут использоваться различные алгоритмы.
  • Конкретные классы ConcreteStrategy реализуют эти различные алгоритмы.
  • Класс Context использует конкретные классы ConcreteStrategy посредством ссылки на конкретный тип абстрактного класса Strategy. Классы Strategy и Context взаимодействуют с целью реализации выбранного алгоритма (в некоторых случаях классу Strategy требуется посылать запросы классу Context). Класс Context пересылает классу Strategy запрос, поступивший от его класса-клиента.

Следствия

  • Шаблон Strategy определяет семейство алгоритмов.
  • Это позволяет отказаться от использования переключателей и/или условных операторов.
  • Вызов всех алгоритмов должен осуществляться стандартным образом (все они должны иметь одинаковый интерфейс).

Реализация

Класс, который использует алгоритм (Context), включает абстрактный класс (Strategy), обладающий абстрактным методом, определяющим способ вызова алгоритма. Каждый производный класс реализует один требуемый вариант алгоритма.

Замечание: метод вызова алгоритма не должен быть абстрактным, если требуется реализовать некоторое поведение, принимаемое по умолчанию.

Примеры

Примеры на Javascript

// "интерфейс" Strategy 
 
	function Strategy() {
		this.exec = function() {};
	};
 
 
// реализации Strategy
 
	// показ ссобщения в статусной строке браузера 
	// (поддерживается не всеми браузерами)
	function StrategyWindowStatus() {
		this.exec = function(message) {
			window.status = message;
		};
	};
	StrategyWindowStatus.prototype = new Strategy();
	StrategyWindowStatus.prototype.constructor = StrategyWindowStatus;
 
	// показ сообщения с помощью попапа
	// (может быть заблокировано браузером)
	function StrategyNewWindow() {
		this.exec = function(message) {
			var win = window.open("", "_blank");
			win.document.write("<html>"+ message +"</html>");
		};
	};
	StrategyNewWindow.prototype = new Strategy();
	StrategyNewWindow.prototype.constructor = StrategyNewWindow;
 
	// показ сообщения с помощью модального окна
	function StrategyAlert() {
		this.exec = function(message) {
			alert(message);
		};
	};
	StrategyAlert.prototype = new Strategy();
	StrategyAlert.prototype.constructor = StrategyAlert;
 
 
// Context
 
	function Context(strategy) {
		this.exec = function(message) {
			strategy.exec(message);
		};
	}
 
 
// Использование
 
var showInWindowStatus = new Context( new StrategyWindowStatus() );
var showInNewWindow = new Context( new StrategyNewWindow() );
var showInAlert = new Context( new StrategyAlert() );
 
showInWindowStatus.exec("сообщение");
showInNewWindow.exec("сообщение");
showInAlert.exec("сообщение");

Пример с использованием динамических (first-class) функций
function Context(fn) {
	this.exec = function() {
		fn.apply(this, arguments || []);
	};
};
 
var showInWindowStatus = new Context( function(message) { 
	window.status = message; 
} );
var showInNewWindow = new Context( function(message) { 
	var win = window.open("", "_blank");
	win.document.write("<html>"+ message +"</html>");
} );
var showInAlert = new Context( function(message) { 
	alert(message); 
} );
 
showInWindowStatus.exec("сообщение");
showInNewWindow.exec("сообщение");
showInAlert.exec("сообщение");

Примеры на PHP5

abstract class FileNamingStrategy{
	abstract function createLinkName($filename);
}
 
class ZipFileNamingStrategy extends FileNamingStrategy{
	function createLinkName($filename){
	return "http://downloads.foo.bar/$filename.zip";
	}
}
 
class TarGzFileNamingStrategy extends FileNamingStrategy{
	function createLinkName($filename){
	return "http://downloads.foo.bar/$filename.tar.gz";
	}
}
 
if(strstr($_SERVER["HTTP_USER_AGENT"], "Win")){
$fileNamingObj = new ZipFileNamingStrategy();
}
else {
$fileNamingObj = new TarGzFileNamingStrategy();
}
 
$calc_filename = $fileNamingObj->createLinkName("Calc101");
$stat_filename = $fileNamingObj->createLinkName("Stat2000");
 
print <<<EOF
<h1>The following is a list of great downloads</h1><br />
<a href="$calc_filename">A great calculator</a><br />
<a href="$stat_filename">The best statistics application</a>
EOF;

Источники информации

  • Шаллоуей, Алан, Тротт, Джейм, Р. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию: Пер. с англ. —М.: Издательский дом «Вильямс», 2002. —288 с. ISBN 5-8459-0301-7
  • Grand, Mark. Шаблоны проектирования в Java: Пер. с англ. — М.: Новое знание, 2004. — 559 с. ISBN 5-94735-047-5



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Strategy" в других словарях:

  • strategy — strategy, tactics, logistics as used in relation to warfare are not always clearly distinguished. Strategy is the art or science involved in the direction of the forces at his disposal by the commander in chief of a belligerent nation or by those …   New Dictionary of Synonyms

  • Strategy — Strat e*gy, n. [Gr. ?: cf. F. strat[ e]gie. See {Stratagem}.] 1. The science of military command, or the science of projecting campaigns and directing great military movements; generalship. [1913 Webster] 2. The use of stratagem or artifice.… …   The Collaborative International Dictionary of English

  • Strategy X — may refer to: * Strategy X (video game), an Atari 2600 game *, the first episode of …   Wikipedia

  • strategy — I noun approach, arrangement, art of war, artifice, battle maneuver, campaign, careful methods, careful plans, consilium, contrivance, course, course of action, cunning, design, devices, engineering, forethought, intrigue, intriguery, invention,… …   Law dictionary

  • strategy — strategy, tactics In war, as in politics and business, strategy is used of an overall plan of action embodying certain principles and objectives, and tactics is used of the detailed means adopted to achieve them. Tactics is normally treated as a… …   Modern English usage

  • strategy — [strat′əjē] n. pl. strategies [Fr stratégie < Gr stratēgia, generalship < stratēgos: see STRATAGEM] 1. a) the science of planning and directing large scale military operations, specif. (as distinguished from TACTICS) of maneuvering forces… …   English World dictionary

  • strategy — (n.) 1810, art of a general, from Fr. stratégie, from Gk. strategia office or command of a general, from strategos general, from stratos multitude, army, expedition, lit. that which is spread out (see STRUCTURE (Cf. structure)) + agos leader,… …   Etymology dictionary

  • strategy — [n] plan of action action, angle, approach, artifice, blueprint*, brainchild*, craft, cunning, design, game, game plan*, gimmick, grand design, layout, maneuvering, method, plan, planning, policy, procedure, program, project, proposition, racket* …   New thesaurus

  • strategy — ► NOUN (pl. strategies) 1) a plan designed to achieve a particular long term aim. 2) the art of planning and directing military activity in a war or battle. Often contrasted with tactics (see TACTIC(Cf. ↑tactician)). DERIVATIVES strategist noun …   English terms dictionary

  • strategy — /strat i jee/, n., pl. strategies. 1. Also, strategics. the science or art of combining and employing the means of war in planning and directing large military movements and operations. 2. the use or an instance of using this science or art. 3.… …   Universalium

  • strategy — The general or specific approach to investing that an individual, institution, or fund manager employs. Bloomberg Financial Dictionary * * * strategy strat‧e‧gy [ˈstrætdʒi] noun strategies PLURALFORM 1. [countable] COMMERCE a plan or series of… …   Financial and business terms


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»