الگوی استراتژی
در برنامهنویسی کامپیوتر الگوی استراتژی (همچنین به عنوان الگوی سیاست و الگوی راهبردگُزین[۱] نیز شناخته میشود) است یک الگوی طراحی نرمافزار رفتاری است که قابلیت انتخاب یک الگوریتم در زمان اجرا را ممکن میسازد.
در الگوی استراتژی:
- یک میانای (Interface) تعریف میشود.
- چندین راهبرد جداگانه اما در پیوند با یک زمینهٔ ویژه، پیادهسازی میگردد.
- هر راهبرد در کلاس جداگانه پوشانده (Encapsulate) میشود و شگرد (Method) همسان برای اجرا دارد.
- میانای، مرجعی به یک راهبرد اولیه نگه میدارد و در زمان اجرا (Runtime) میتواند راهبردها را با یکدیگر جایگزین کند؛ بنابراین راهبردها جایگزینپذیر هستند.
الگوی استراتژی اجازه میدهد تا الگوریتمهای گوناگون به شکل جداگانه و مستقل از کارخواه اجرا شوند.[۲] الگوی استراتژی یکی از الگوهای موجود در کتاب مشهور الگوهای طراحی است که توسط گاما و دیگران نوشته شدهاست و مفهوم استفاده از الگوهای طراحی برای توصیف نحوه طراحی انعطافپذیر و قابل استفاده مجدد شی گرا در نرمافزار را محبوب ساخت. هدف از الگوی راهبردگزین، جداکردن الگوریتمها از مصرفکننده تا بتوان الگوریتمها را بدون تغییر مایانای افزوده یا تغییر داد.
نمونهای از کدها
یک نمونهٔ ساده با استفاده از زبان برنامهنویسیِ پایتون:
from abc import ABC, abstractmethod
class Strategy(ABC):
@abstractmethod
def execute(self, data):
pass
class StrategyA(Strategy):
def execute(self, data):
# simple ascending sort
return sorted(data)
class StrategyB(Strategy):
def execute(self, data):
# descending sort
return list(reversed(sorted(data)))
class Context:
def __init__(self, strategy: Strategy):
self._strategy = strategy
@property
def strategy(self):
return self._strategy
@strategy.setter
def strategy(self, strategy: Strategy):
self._strategy = strategy
def do_work(self, data):
result = self._strategy.execute(data)
print(",".join(result))
# Usage
data = ["a", "c", "b"]
ctx = Context(StrategyA())
ctx.do_work(data) # ascending
ctx.strategy = StrategyB()
ctx.do_work(data) # descending
همچنین یک نمونهٔ دیگر با زبان تایپاسکریپت[۳]:
// Strategy interface
interface Strategy {
execute(data: string[]): string[];
}
// Concrete strategies
class AscendingStrategy implements Strategy {
execute(data: string[]): string[] {
return [...data].sort();
}
}
class DescendingStrategy implements Strategy {
execute(data: string[]): string[] {
return [...data].sort().reverse();
}
}
// Context
class Context {
private strategy: Strategy;
constructor(strategy: Strategy) {
this.strategy = strategy;
}
setStrategy(strategy: Strategy) {
this.strategy = strategy;
}
execute(data: string[]) {
const result = this.strategy.execute(data);
console.log(result.join(','));
}
}
// Usage
const data = ['a', 'c', 'b'];
const ctx = new Context(new AscendingStrategy());
ctx.execute(data); // ascending
ctx.setStrategy(new DescendingStrategy());
ctx.execute(data); // descending
نمودارِ کلاس

جستارهای وابسته
منابع
- ↑ «سامانه واژهیار - برابرنهاد مصوب برای «Strategy» در فرهنگستان». vajeyar.apll.ir. دریافتشده در ۲۰۲۵-۱۰-۱۲.
- ↑ Eric Freeman, Elisabeth Freeman, Kathy Sierra and Bert Bates, Head First Design Patterns, First Edition, Chapter 1, Page 24, O'Reilly Media, Inc, 2004. شابک ۹۷۸−۰−۵۹۶−۰۰۷۱۲−۶
- ↑ "Strategy in TypeScript / Design Patterns". refactoring.guru (به انگلیسی). Retrieved 2025-10-12.