الگوی طراحی strategy در جاوا اسکریپت

الگوی طراحی strategy در جاوا اسکریپت نوشته شده در   javascript 27 دسامبر , 2018 توسط  عباس حسینی

وقتی به زندگی روزمره می اندیشیم به این نتیجه میرسیم که گاهی در زندگی در شرایط مختلف باید برنامه های متفاوتی داشته باشیم و به شکل های مختلفی عمل کنیم اگر شما هم در چنین شرایطی بودید باید بدانید که ندانسته از الگوی طراحی strategy استفاده کرده اید در ادامه به طور کامل به این الگو خواهم پرداخت

تعریف الگوی طراحی strategy در جاوا اسکریپت

الگوی طراحی strategy در تعریف به ما میگوید که الگوریتم کارهای مختلفی که یک کلاس باید انجام دهد را میتوان در کلاس های جدا به نام sterategy پیاده سازی کرد

الگوی طراحی strategy
اگر به شکل بالا دقت کنید این الگو از سه بخش اصلی تشکیل شده

context : کلاسی که قرار است چند کار مختلف انجام دهد
client : کسی که تعیین میکند کدام استراتژی روی context اعمال شود
strategy : الگوریتم کاری که قرار است context دهد
نکته بسیار مهم این استه که context هیچ اطلاعی از استراتژِی ها ندارد ، بلکه این کلاینت است که تعیین میکند کدام استراتژِی روی آن اعمال شود
فرض کنید یک فروشگاه فروش کتاب داریم که با دو رویکرد کتاب های خود را به فروش میرساند، عرضه رایگان و فروش
در سیستم این فروشگاه با استفاده از الگوی طراحی استراتژِی تصمیم گیری میشود که کتاب های رایگان و پولی چگونه به فروش برسند

نحوه پیاده سازی الگوی طراحی strategy در جاو اسکریپت

برای پیاده سازی این الگو کافیست context و استراتژی های مربوط به آن را شناسایی کنید و بر اساس آنها پیاده سازی را انجام دهید
مثلا در مثال فروشگاه اینترنتی خود فروشگاه نقش context و عرضه رایگان و فروش هر کدام استراتژِی های ما هستند، پس شروع به پیاده سازی میکنم در ابتدا یک کلاس به نام Shopping تشکیل میدهیم که خود دارای دو متد setStrategy و calculate میباشد


class Shopping {
   constructor (){
      this.strategy = ''
   }
   setStrategy (strategy) {
      this.strategy = strategy;
   }
   calculate () {
      document.write(product.name +' Price: ', this.strategy.calculate(product));
   }
}

و از طرفی دو استراتژِی داریم پس دو کلاس با نام های Free و Premium تشکیل میدهیم که خود دارای الگوریتم محاسبه قیمت میباشند


class Free {
   calculate (product) { return "0$" }
}
class Premium {
   calculate (product) { return (product.kpi * 1.5) + '$' }
}

برای اجرای الگو یک محصول فرضی ساخته سپس با استفاده از متد setStrategy یک استراتژی تعیین میکنیم و در انتها با استفاده از متد calculate میتوانید قیمت مورد نظر را محاسبه کنید
نتیجه اجرای آن را نیز میتوانید در ادامه مشاهده کنید



var product = { name:'Javascript design', kpi:1.254 };

// the 2 strategies
var FREE = new Free();
var PREMIUM = new Premium();

var SHOPPING = new Shopping();

SHOPPING.setStrategy(FREE)
SHOPPING.calculate(product)

See the Pen Javascript Strategy Pattern by abbas hosseini (@abizebel) on CodePen.

موارد استفاده از الگوی strategy در جاوا اسکریپت

زمانی از این الگو استفاده میشود که در هنگام runtime میخواهیم تصمیم بگیرم که از بین الگوریتم های موجود کدام را انتخاب کنیم

از آنجاییکه قابلیت افزودن استراتژِی یا ویرایش استراتژِی های قبلی بدون تغییر در کلاس اصلی context امکان پذیر است پس اصل open/closed بخوبی در این الگو رعایت میشود

لیست الگوهای طراحی GOF در جاو اسکریپت

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns