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

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

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

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

الگوی طراحی bridge الگوییست که در آن  abstraction میتواند از پیاده سازی جدا باشد خب این تعریف بسیار گنگ است و سوالاتی را در ذهن شما به وجود می آورد !!!!
الگوی طراحی bridge
هنگام استفاده از ارث بری هر جایی که یک کلاس چندین پیاده سازی داشته باشد، اولین چیزی که به ذهن ما میرسد این است یک abstract class داریم و subclass از آن به ارث برده و هرکدام پیاده سازی مختص به خود را دارند و این باعث وابستگی subclass ها به کلاس پدرشان میشود

الگوی bridge برای حل این مشکل به ما کمک میکند و به جای اینکه پیاده سازی های مختلفی در قالب subclass داشته باشیم ،پیاده سازی های مختلف را بطور جدا گانه بدون وابستگی به abstract class داشته باشیم

bridge-pattern

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

الگوی bridge به ما میگه آنچه که باعث به وجود امدن تعداد کلاس های زیادی در سیستم میشود را جدا کنید مثلا در اینجا امکان تفیکیک  کلاس تلویزیون و ریموت کنترل وجود دارد

تفاوت bridge با adapter این است که bridge هنگام ساخت یک چیز جدید اما adapter برای سازگاری سیستم های موجود بکار میرود

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

با توجه به مثال ذکر شده و تعریف الگوی bridge برای پیاده سازی این الگو کافیست یک کلاس پایه به نام RemoteControl داشته باشیم که نوع تلویزیون را دریافت کرده و بر اساس آن سه متد اصلی خاموش/روشن کردن و تغییر کانال را داشه باشد


class RemoteControl {
  constructor (tv){
    this.tv = tv
  }
  on(){ 
    tv.on() 
  }
  off(){ 
    tv.off() 
  }

و یک کلاس به نام Tv که دستورات خاموش و روش و تغییر کانال را بپذیرد


class Tv {
  on(){}
  off(){}
}

حال دو کلاس SamsungTv و LgTv از کلاس اصلی Tv به ارث برده و پیاده سازی مختص به خود را خواهند داشت


class SamsungTv extends Tv {
  on(){ }
  off(){ }

}

class LgTv extends Tv {
  on(){ }
  off(){ }
}

با این کار پیاده سازی این دو ریموت کنترل از مفهوم انتزاعی ریموت کنترل جدا میشود به همین دلیل میگویند که در این الگو هدف جدا سازی پیاده سازی از abstraction یا تعریف انتزاعی است

See the Pen Bridge Design Pattern by abbas hosseini (@abizebel) on CodePen.

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

باعث میشه پیچیدگی ساخت اشیا کم بشه
اصل open/closed را پیاده سازی میکند
جزئیات پیاده سازی از دیدی کاربر مخفی میشود

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

 

Creational Patterns

 

Structural Patterns

 

Behavioral Patterns