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

الگوی طراحی template method در جاوا اسکریپت نوشته شده در   javascript ۹ دی , ۱۳۹۷ توسط  عباس حسینی

به عنوان یک برنامه نویس فرض کنید در طراحی یک بخشی از نرم افزار ممکن است بخشی وجود داشته باشد که یک سری گزارش را در قالب فایل pdf به ما ارائه میدهد ، پس از مدتی از ما میخواهند که قابلیتی به آن اضافه کنیم که بتوان با فرمت DOC نیز گرارش تهیه کرد

دوباره پس از مدتی نیاز برای دریافت گزارش با فرمت CSV اعلام میشود و ما مجبور هستیم آن را نیز به پروژه اضافه کنیم در چنین مواقعی الگوی طراحی template method به داد ما میرسد و به ما در پیاده سازی کمک میکند که در ادامه آن را خواهید آموخت .

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

الگوی طراحی template method الگویی است که در آن یک سری از مسئولیت ها به subclass ها محول میشوند و آنها میتوانند به روش خود آن را پیاده سازی مجدد کنند

الگوی طراحی template method

template method یک asbtract class است که در آن الگوریتم به چند بخش یا step تقسیم میشود که پیاده سازی پیش فرض خود را دارند و subclass ها میتوانند به دلخواه، پیاده سازی خود را روی هر بخش از این الگوریتم ها داشته باشند

بنابراین برای افزودن یک قابلیت جدید نیازی به تغییر در کد های قبلی نداریم با افزودن یک زیر کلاس جدید میتوانید متد های کلاس بالا را به دلخواه پیاده کنید و قابلیتی جدید به سیستم اضافه کنید

مثلا در مثالی که ذکر شد، آنجاییکه قرار است از یک گزارش خروجی های مختلف گرفته شود خود عمل خروجی گرفتن از یک گزارش یک template method است و مراحلی که برای خروجی گرفتن انجام میشود step هایی است که زیر کلاس ها میتوانند بدون تغییر در اصل آن پیاده سازی دلخواه خود را روی آن داشته باشند

اگر با مفهوم abstract class و abstract method آشنایی ندارید مطلب زیر را مطالعه کنید

لینک مطالعه :

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

برای پیاده سازی قصد دارم همان مثال گزارشگیری را پیاده سازی کنم که در آن گزارش گرفتن یک template method و مراحل گرفتن گزارش که عبارتند از باز کردن فایل و قرار دادن محتویات گزارش روی آن و در نهایت بستن آن

پس یک abstract class به نام Report تشکیل میدهیم که دارای سه abstract method به نام های openFile ،writeFile و closeFile میباشد که هر کدام یک پیاده سازی پیش فرض را دارا میباشند و همان step های template method ما میباشند


//Abstract class
class Report {
  openFile(){
    document.write('default open file 
')
  }
  writeFile(){
     document.write('default write file 
')

  }
  closeFile(){
     document.write('default close file 
')

  }
}

سپس دو کلاس با نام های PdfReport و DocReport تشکیل میدهیم که هر کدام دو متد openFile و closeFile را به دلخواه پیاده سازی مجدد میکنند



//Concrete class
class PdfReport extends Report{
  openFile(){
    document.write('open pdf file 
')
  }
  closeFile(){
    document.write('close pdf file 
')
  }
}

//Concrete class
class DocReport extends Report{
  openFile(){
     document.write('open doc file 
')
  }
  closeFile(){
     document.write('open doc file 
')

  }  
}

که در ادامه نیز نتیجه اجرای کد را میبینید که یک instance از کلاس pdf ساخته شده و مراحل ساخت یک گزارش pdf در آن فراخوانی شده است

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

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

زمانی از این الگو استفاده میشود که چندین کلاس داریم که منطق یکسانی را دارند که استفاده از این الگو باعث صرفه جویی و reusability میشود

و همچنین استفاده اصل دوم سالید یعنی open closed principle را پوشش میدهد زیرا برای افزودن یک قابلیت جدید به سیستم نیازی نیست تغییری در کد های قبلی ایجاد کنیم بلکه با ساخت یک کلاس جدید این قابلیت را براحتی میتوانی به سیستم اضافه کنیم بنابراین از اصل single responsibility principle نیز پیروی کرده ایم و برای هر کار خاص یک کلاس مجزا تشکیل میدهیم

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

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns