وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

الگوی طراحی پل با پایتون

0 9
زمان لازم برای مطالعه: 4 دقیقه


معرفی

الگوی طراحی پل هست یک الگوی طراحی سازه، که انتزاع را از اجرا جدا می کند. در این مقاله، انگیزه و اجرای الگوی طراحی پل در پایتون را پوشش خواهیم داد.

الگوهای طراحی به مجموعه‌ای از روش‌های استاندارد یا راه‌حل برای مشکلات معماری رایج در مهندسی نرم‌افزار اشاره می‌کند.

الگوی طراحی انگیزه پشت پل

الگوی پل از چیزی که به آن می گویند جلوگیری می کند پیچیدگی محصول دکارتی انفجار

با یک مثال مشکل آشکار خواهد شد. فرض کنید شما در حال پیاده سازی یک Airplane. این می تواند یک هواپیمای نظامی یا تجاری باشد. علاوه بر این، می تواند یک هواپیمای مسافربری/سرباز یا باری باشد.

یکی از رویکردها برای اجرای این، داشتن یک MilitaryPassenger، MilitaryCargo، CommercialPassenger و CommercialCargo هواپیماها

اینجا ضرب دکارتی پیچیدگی است 2 x 2 = 4. این عدد در این مقیاس پیشرفت‌کننده نیست، اما وقتی کلاس‌ها و تنوع‌های بیشتری را وارد می‌کنید، می‌تواند به طور تصاعدی افزایش یابد و خیلی سریع غیرقابل مدیریت می‌شود.

را الگوی پل استفاده می شود، خوب، به عنوان یک پل بین کلاس ها (Airplane اجرا) و ویژگی های آنها (این هواپیما مسافربری است یا باری). به نفع خود است ترکیب بندی بر فراز وراثت.

با استفاده از الگو، یک کلاس برای هر یک از انواع در دسته های مختلف ایجاد می کنید. به عنوان مثال، در مثال ما، یک CommercialPlane و MilitaryPlane به عنوان نهادها، با CargoCarrier و PassengerCarrier به عنوان نهادهای جداگانه

شاید اینطور به نظر نرسد که از آنجایی که هنوز 4 کلاس داریم کارهای زیادی انجام داده ایم، اما این را تصور کنید روی یک ترازو شما می توانید داشته nPlane کلاس ها و فقط دارند CargoCarrier و PassengerCarrier که می توانید برای این هواپیماها اعمال کنید.

حتی یک راه بهتر، داشتن کلاس های والدین است – Carrier و Plane. برای Carrier کلاس والد، می توانید دو کلاس فرزند ایجاد کنید: Cargo و Passenger. به طور مشابه، برای Plane کلاس والدین، دو کلاس فرزند: Military و Commercial.

در مرحله بعد، به راهی برای اتصال، یا به عبارت دیگر، پل نیاز دارید Carrier و Plane زیر کلاس ها شما می توانید این کار را با ارسال یکی از این دو کلاس به عنوان مقدار پارامتر در سازنده کلاس دیگر انجام دهید. با پیاده‌سازی الگو، می‌توانیم هر یک از زیر کلاس‌ها را ترکیب کنیم.

در نهایت، بیایید ببینیم چگونه می توانیم الگوی طراحی پل را در پایتون پیاده سازی کنیم.

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

همانطور که قبلاً گفتم، ما یک کلاس والد ایجاد خواهیم کرد Carrier با دو روش انتزاعی: carry_military()، و carry_passenger(). بعد، می توانیم یک کلاس کودک ایجاد کنیم Cargo که از آن به ارث می برد Carrier کلاس و پیاده سازی می کند carry_military() و carry_commercial() مواد و روش ها.

برای جلوگیری از شیب لغزنده اضافه کردن انواع کلاس‌ها، a را تعریف می‌کنیم Carrier با دو روش انتزاعی – carry_military() و cary_passenger().

را Carrier کلاس علاوه بر این دارای دو کلاس کودک خواهد بود – Cargo و Passenger که هم متدهای انتزاعی آن را به ارث می برند و هم آنها را پیاده سازی می کنند:



class Carrier:
    def carry_military(self, items):
        pass
    
    def carry_commercial(self, items):
        pass
    
class Cargo(Carrier):
    def carry_military(self, items):
        print("The plane carries ", items," military cargo goods")
        
    def carry_commercial(self, items):
        print("The plane carries ", items," commercial cargo goods") 

class Passenger(Carrier):
    def carry_military(self, passengers):
        print("The plane carries ",  passengers , " military passengers")
        
    def carry_commercial(self, passengers):
        print("The plane carries ",  passengers , " commercial passengers") 

در همین راستا، ما یک را ایجاد خواهیم کرد Plane کلاس با دو روش انتزاعی – display_description() و add_objects()و همچنین دو کلاس کودک – Commercial و Military. ما عبور خواهیم کرد Carrier به سازنده Plane کلاس این هست پل.

اگر هواپیما a Commercial هواپیما، این است Cargo و Passenger بر خواهد گشت carry_commercial()، و بالعکس.

تعداد مسافران/کالاها در self.objects متغیری که به عنوان پارامتر به carry_commercial() روش:


class Plane:
    def __init__(self, Carrier):
        self.carrier = Carrier
        
    def display_description(self):
        pass
    
    def add_objects(self):
        pass
    
class Commercial(Plane):
    def __init__(self, Carrier, objects):
        super().__init__(Carrier)
        self.objects = objects

    def display_description(self):
        self.carrier.carry_commercial(self.objects)

    def add_objects(self, new_objects):
        self.objects += new_objects   

class Military(Plane):
    def __init__(self, Carrier, objects):
        super().__init__(Carrier)
        self.objects = objects

    def display_description(self):
        self.carrier.carry_military(self.objects)

    def add_objects(self, new_objects):
        self.objects += new_objects

کلاس های ما آماده و آماده است. اکنون زمان ایجاد برخی اشیاء و داشتن آنهاست پل بین خود از طریق فراخوان سازنده که قبلا ذکر شد.

بیایید به یک مثال نگاه کنیم:

cargo = Cargo()
passenger = Passenger()


military1 = Military(cargo , 100)
military1.display_description()
military1.add_objects(25)
military1.display_description()

در اینجا، ما اشیاء را برای آن نمونه‌سازی کرده‌ایم Cargo و Passenger کلاس ها. سپس در یک سازنده فراخوانی به Military کلاس را پشت سر گذاشتیم cargo نمونه، مثال. از آنجایی که این یک هواپیمای نظامی است، محموله محموله نظامی محسوب می شود.

بنابراین، display_description() روش خواهد شد print جزئیات مربوط به محموله های نظامی علاوه بر این، ما دیگری را اضافه کرده ایم 25 اشیاء روی بالای این بار:

The plane carries 100 military cargo goods
The plane carries 125 military cargo goods

در همین راستا، ما می توانیم پل Military و Passenger کلاس ها نیز:

cargo = Cargo()
passenger = Passenger()


military2 = Military(passenger , 250)
military2.display_description()
military2.add_objects(10)
military2.display_description()

به طور طبیعی، display_description() این روش تعداد مسافران نظامی را که حمل می کنیم را نشان می دهد:

The plane carries 250 military passengers
The plane carries 260 military passengers

به طور مشابه، ما می توانیم پل Commercial و Passenger:


commercial1 = Commercial(passenger , 400)
commercial1.display_description()
commercial1.add_objects(50)
commercial1.display_description()

که منجر به:

The plane carries 400 commercial passengers
The plane carries 450 commercial passengers

و در نهایت، ما می توانیم پل Commercial و Cargo کلاس ها:


commercial2 = Commercial(cargo, 150)
commercial2.display_description()
commercial2.add_objects(15)
commercial2.display_description()

که منجر به:

The plane carries 150 commercial cargo goods
The plane carries 165 commercial cargo goods

نتیجه

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

پس از آن، ما الگو را در پایتون پیاده‌سازی کرده‌ایم و روش عملکرد الگو را نشان می‌دهیم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-17 14:17:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید