از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
الگوی طراحی روش کارخانه در پایتون
سرفصلهای مطلب
معرفی
در این مقاله، ما به الگوی طراحی روش کارخانه، که در پایتون پیاده سازی شده است، می پردازیم.
الگوهای طراحی راه حل های آزمایش شده و آزمایش شده را برای مشکلات تکراری مختلف در توسعه نرم افزار تعریف می کنند. آنها کد واقعی را نشان نمی دهند، بلکه روش هایی را نشان می دهند که می توانیم کد خود را برای نتایج بهینه سازماندهی کنیم.
در دنیایی با منابع محدود، طرحهای طراحی به ما کمک میکنند تا با کمترین میزان استفاده از منابع، بیشترین نتایج را به دست آوریم. همچنین مهم است که توجه داشته باشید که الگوهای طراحی برای همه موقعیت ها اعمال نمی شود و ارزیابی مشکل در دست به منظور انتخاب بهترین رویکرد برای آن سناریوی خاص بسیار مهم است.
الگوهای طراحی به چند دسته کلی تقسیم می شوند، البته عمدتاً به الگوهای خلاقانه، الگوهای ساختاری و الگوهای رفتاری.
الگوی Factory Method a الگوی طراحی خلاقانه.
الگوی طراحی روش کارخانه
تعریف
روش Factory در برنامه نویسی شی گرا به عنوان وسیله ای برای ارائه استفاده می شود کارخانه رابط برای ایجاد اشیا این رابط ها ساختار عمومی را تعریف می کنند، اما اشیاء را مقداردهی اولیه نمی کنند. مقداردهی اولیه به زیر کلاس های خاص تری واگذار می شود.
کلاس/رابط والد تمام رفتار استاندارد و عمومی را در خود جای داده است که می تواند در زیر کلاس های مختلف به اشتراک گذاشته شود. زیر کلاس به نوبه خود مسئول تعریف و نمونه سازی شی مبتنی است روی سوپر کلاس
انگیزه
انگیزه اصلی پشت الگوی طراحی روش Factory، تقویت اتصال آزاد در کد از طریق ایجاد یک کلاس انتزاعی است که برای ایجاد انواع مختلفی از اشیاء که برخی از ویژگی ها و عملکردهای مشترک را به اشتراک می گذارند استفاده می شود.
این منجر به افزایش انعطافپذیری و استفاده مجدد از کد میشود، زیرا عملکرد مشترک با به ارث بردن از همان کلاس بازنویسی نمیشود. این الگوی طراحی با نام a نیز شناخته می شود سازنده مجازی.
الگوی طراحی Factory Method معمولاً در کتابخانه ها استفاده می شود و به مشتریان اجازه می دهد تا از طریق یک کلاس انتزاعی چه زیر کلاس یا نوع شی را ایجاد کنند.
یک Factory Method اطلاعاتی در مورد یک شی مورد نیاز دریافت می کند، آن را نمونه سازی می کند و شی از نوع مشخص شده را برمی گرداند. این به برنامه یا کتابخانه ما یک نقطه تعامل با سایر برنامه ها یا قطعات کد می دهد و در نتیجه عملکرد ایجاد شی ما را محصور می کند.
پیاده سازی روش کارخانه
برنامه ما قرار است کتابخانه ای باشد که برای مدیریت اشیاء شکل از نظر ایجاد و سایر عملیات مانند افزودن رنگ و محاسبه مساحت شکل استفاده می شود.
کاربران باید بتوانند از کتابخانه ما برای ایجاد اشیاء جدید استفاده کنند. ما میتوانیم با ایجاد اشکال منفرد و استفاده از آنها به همان شکلی که هست شروع کنیم، اما این بدان معناست که منطق مشترک زیادی برای هر شکلی که در دسترس داریم بازنویسی شود.
اولین قدم برای حل این تکرار، ایجاد یک کلاس شکل والد است که دارای روش هایی مانند calculate_area()
و calculate_perimeter()
، و ویژگی هایی مانند ابعاد.
سپس اشیاء شکل خاص از کلاس پایه ما به ارث می برند. برای ایجاد یک شکل، باید تشخیص دهیم که چه نوع شکلی مورد نیاز است و زیر کلاس برای آن ایجاد کنیم.
ما با ایجاد یک کلاس انتزاعی برای نمایش یک شکل عمومی شروع خواهیم کرد:
import abc
class Shape(metaclass=abc.ABCMeta):
@abc.abstractmethod
def calculate_area(self):
pass
@abc.abstractmethod
def calculate_perimeter(self):
pass
این کلاس پایه برای همه اشکال ما است. بیایید جلو برویم و چندین شکل بتن و خاص تر ایجاد کنیم:
class Rectangle(Shape):
def __init__(self, height, width):
self.height = height
self.width = width
def calculate_area(self):
return self.height * self.width
def calculate_perimeter(self):
return 2 * (self.height + self.width)
class Square(Shape):
def __init__(self, width):
self.width = width
def calculate_area(self):
return self.width ** 2
def calculate_perimeter(self):
return 4 * self.width
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return 3.14 * self.radius * self.radius
def calculate_perimeter(self):
return 2 * 3.14 * self.radius
تا کنون، ما یک کلاس انتزاعی ایجاد کردهایم و آن را گسترش دادهایم تا متناسب با اشکال مختلفی باشد که در کتابخانه ما در دسترس خواهد بود. برای ایجاد اشکال مختلف، مشتریان باید نام و جزئیات اشکال ما را بدانند و به طور جداگانه ایجاد را انجام دهند.
اینجاست که روش کارخانه وارد بازی می شود.
الگوی طراحی Factory Method به ما کمک می کند تا اشکال موجود را از مشتری انتزاع کنیم، یعنی مشتری مجبور نیست همه اشکال موجود را بداند، بلکه فقط آنچه را که در زمان اجرا نیاز دارد ایجاد کند. همچنین به ما این امکان را می دهد که ایجاد شی را متمرکز و محصور کنیم.
اجازه دهید با ایجاد یک به این دست یابیم ShapeFactory
که برای ایجاد کلاس های شکل خاص بر اساس استفاده خواهد شد روی ورودی مشتری:
class ShapeFactory:
def create_shape(self, name):
if name == 'circle':
radius = input("Enter the radius of the circle: ")
return Circle(float(radius))
elif name == 'rectangle':
height = input("Enter the height of the rectangle: ")
width = input("Enter the width of the rectangle: ")
return Rectangle(int(height), int(width))
elif name == 'square':
width = input("Enter the width of the square: ")
return Square(int(width))
این ماست رابط برای خلقت ما به سازندگان طبقات بتن نمی گوییم، ما آن ها را می نامیم کارخانه و از آن بخواهید یک شکل ایجاد کند.
ما ShapeFactory
با دریافت اطلاعات در مورد یک شکل مانند نام و ابعاد مورد نیاز کار می کند. روش کارخانه ما create_shape()
سپس برای ایجاد و برگرداندن اشیاء آماده از اشکال مورد نظر استفاده خواهد شد.
نیازی نیست که مشتری چیزی در مورد ایجاد شی یا مشخصات آن بداند. با استفاده از شی کارخانه، آنها می توانند اشیایی را با حداقل دانش از روش کار آنها ایجاد کنند:
def shapes_client():
shape_factory = ShapeFactory()
shape_name = input("Enter the name of the shape: ")
shape = shape_factory.create_shape(shape_name)
print(f"The type of object created: {type(shape)}")
print(f"The area of the {shape_name} is: {shape.calculate_area()}")
print(f"The perimeter of the {shape_name} is: {shape.calculate_perimeter()}")
اجرای این کد منجر به موارد زیر می شود:
Enter the name of the shape: circle
Enter the radius of the circle: 7
The type of object created: <class '__main__.Circle'>
The area of the circle is: 153.86
The perimeter of the circle is: 43.96
یا می توانیم شکل دیگری بسازیم:
Enter the name of the shape: square
Enter the width of the square: 5
The type of object created: <class '__main__.Square'>
The area of the square is: 25
The perimeter of the square is: 20
آنچه شایان ذکر است این است که علاوه بر این، مشتری نیازی به دانستن چیزهای زیادی در مورد ایجاد ندارد process – وقتی میخواهیم یک شی را نمونهسازی کنیم، سازنده کلاس را صدا نمیزنیم. ما از کارخانه می خواهیم که این کار را برای ما انجام دهد روی اطلاعاتی که به آن منتقل می کنیم create_shape()
تابع.
مزایا و معایب
طرفداران
یکی از مزیتهای اصلی استفاده از الگوی طراحی Factory Method این است که کد ما بهطور ضعیفی جفت میشود، زیرا اکثر مؤلفههای کد ما از سایر مؤلفههای همان پایگاه کد بیاطلاع هستند.
این منجر به کدهایی می شود که درک و آزمایش آسان است و عملکرد بیشتری را به مؤلفه های خاص بدون تأثیر یا شکستن کل برنامه اضافه می کند.
الگوی طراحی Factory Method نیز به حفظ آن کمک می کند اصل مسئولیت واحد که در آن کلاس ها و اشیایی که عملکرد خاصی را مدیریت می کنند منجر به کد بهتری می شوند.
منفی
ایجاد کلاس های بیشتر در نهایت منجر به خوانایی کمتر می شود. اگر با یک Abstract Factory (کارخانه کارخانه ها) ترکیب شود، کد به زودی پرمخاطب خواهد شد، اگرچه قابل نگهداری است.
نتیجه
در نتیجه، Factory Method Design Pattern به ما این امکان را می دهد که بدون تعیین کلاس دقیق مورد نیاز برای ایجاد شی خاص، اشیاء را ایجاد کنیم. این به ما امکان می دهد کد خود را جدا کنیم و قابلیت استفاده مجدد آن را افزایش دهیم.
توجه به این نکته مهم است که مانند هر الگوی طراحی دیگری، فقط برای موقعیت های خاص مناسب است و نه هر سناریوی توسعه. ارزیابی وضعیت موجود قبل از تصمیم گیری برای اجرای الگوی طراحی روش کارخانه برای بهره مندی از مزایای الگو بسیار مهم است.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-17 10:53:06