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

الگوی طراحی builder در جاوا اسکریپت نوشته شده در   javascript 13 ژانویه , 2019 توسط  عباس حسینی

فرض کنید قصد ساخت یک خانه دارید و شما برای ساخت آن باید کار های مختلفی مثل ساخت دیوار ، سقف، استخر، نما، در ورودی و غیره … را انجام دهید در چنین موقعی که شما نیاز دارید بخش های زیادی برای یک کلاس در نظر بگیرید الگوی طراحی builder برای حل این مشکل به شما کمک خواهد کرد که در ادامه به طور کامل به آن خواهم پرداخت .

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

اگر به مثال بالا توجه کنید هنگامی که شما میخواهید یک خانه بسازید باید بخش های مختلفی را برای آن در نظر بگیرد و از طرفی ممکن تنوع بین آنها زیاد باشد مثلا یکی نیاز به استخر داشته باشد و یکی نداشته باشد و این پیچیدگی ساخت یک شی مثلا خانه را برای ما زیاد میکند.

یک راه برای حل این مشکل ساخت تعداد زیادی زیر کلاس متناسب با هر خانه است که باعث میشود تعداد زیر کلاس ها زیاد شود پس این کار راه حل مناسبی نیست
راه حل دیگر ارسال پارامتر های متناسب با امکانات هر منزل است که مشکل این روش هم وجود پارامتر های زیاد است
builder pattern javascript

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

builder pattern diagram
الگوی طراحی builder از دو بخش اصلی تشکیل شده است
builder : یک interface شامل تمام مراحل مورد نیاز برای ساخت محصول است
director : از مراحلی که برای ساخت شی مورد نظر باید طی شود مطلع است

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

برای پیاده سازی این الگو قصد دارم از مثال ساخت خانه استفاده کنم پس برای شروع یک کلاس به نام Housebuilder تشکیل میدهیم که همه مراحل ساخت هر جور خانه ای را در خود در قالب متد هایی جدا گانه دارد و پس از صدا زدن هر کدام از این متد ها flag مربوط به آن true میشود و همچنینی یک متد به نام get دارد که که شی مورد نظر را برای ما بطور کامل برمیگیرداند


class HouseBuilder {
  constructor (){
    this.walls = false;
    this.doors = false;
    this.roofs = false;
    this.pool = false;
    this.parking = false;
  }
  buildWalls(){
    this.walls = true
  }
  buildDoors(){
    this.doors = true
  }
  buildRoofs(){
    this.roofs = true
  }
  buildPool(){
    this.pool = true
  }
  buildParking(){
    this.parking = true
  }
  get(){
    return this
  }
}

سپس نیاز به یک HouseDirector داریم که مراحل ساخت خانه را مدیریت کند که در اینجا ما دو نوع خانه vip و معمولی داریم


class HouseDirector {
  constructor (builder){
    this.builder = builder
  }
  makeVIP (){
    this.builder.buildWalls();
    this.builder.buildDoors();
    this.builder.buildRoofs();
    this.builder.buildPool();
    this.builder.buildParking();
    return  this.builder.get()
  }
  makeNormal(){
    this.builder.buildWalls();
    this.builder.buildDoors();
    this.builder.buildRoofs(); 
    return  this.builder.get()
  }
}

پس از تشکیل این دو کلاس به کمک HouseDirector میتوانیم انواع مختلف خانه را بسازیم که نتیجه آن را در ادامه میتوانید مشاهده کنید

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

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

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

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

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns