از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
الگوی طراحی پل با پایتون
سرفصلهای مطلب
معرفی
الگوی طراحی پل هست یک الگوی طراحی سازه، که انتزاع را از اجرا جدا می کند. در این مقاله، انگیزه و اجرای الگوی طراحی پل در پایتون را پوشش خواهیم داد.
الگوهای طراحی به مجموعهای از روشهای استاندارد یا راهحل برای مشکلات معماری رایج در مهندسی نرمافزار اشاره میکند.
الگوی طراحی انگیزه پشت پل
الگوی پل از چیزی که به آن می گویند جلوگیری می کند پیچیدگی محصول دکارتی انفجار
با یک مثال مشکل آشکار خواهد شد. فرض کنید شما در حال پیاده سازی یک 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