🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ Armin
فرق الگو factory و abstract factory
جامعه پایتون (وب) ایجاد شده در ۳۰ مهر ۱۴۰۱

سلام

abstract factory برای جلوگیری از پیچیدگی کد و همچنین برای توسعه راحتر کد در آیتده استفاده میشود و طرز استفاده از اون بصورتی که کلاس‌های اصلی رو به کلاس‌های جزی‌تر و کوچکتر تبدیل میکنیم و با ارث بری به هم متصل میکنیم

اما Factory برای چی استفاده میشه و چطوری باید در کدمون استفاده بکنیم؟

سلااام . . .

خلاصه : هر دو ( سه ) یک کار رو انجام میدن فرقشون توی نحوه اجرا این پیاده سازی الگو هاست .

در واقع ما سه تا دیزاین پترن داریم factory و factory method و abstract factory تفاوت عمده این سه :

  • Factory : شامل کلاس فکتوری هست که یک یا چند نوع شئ را میتونه بسازه
  • Factory method : شامل کلاس فکتوری هست با یک متد create که فقط یک نوع شئ میتونه بسازه
  • Abstract factory : با یک رابط (interface) یک حالت انتزاعی از کلاس فکتوری میسازه که میتونه انواع مختلفی از شئ را تولید کنه .

dc7b-1_l6pVpV0u6uu2a540h7YERQ.png

همونطور که اینجا هم توضیح داده از فکتوری برای ساخت شئ با یک هدف مشخص استفاده میشه .

یک مثال دیگه از ویرگول :

یک کارخانه فقط پراید میسازد و میتواند فقط پراید بسازدو ماشین دیگری نمیسازداما کارخانه ی دیگری وجود دارد که داخلش چندین بخش مختلف است که هر بخش یک ماشین بخصوص میسازدتفاوت این دو پترن هم همینجاست که factory مثلا انواع پراید هارا میسازداما Abstract factory ؟میاد چندین ماشین میسازد که هر کدام برای یک کارخانه ی جداست....

حالا کد : این یه مثال از ماشین‌ها با abstract factory هست

"""
	    Creational:
	        abstract factory
	            Car => Benz, Bmw => Suv, Coupe
				benz suv => gla, glc
				bmw suv => x1, x2
				benz coupe => cls, E-class
				bmw coupe => m2, m4
	"""
	from abc import ABC, abstractmethod
	class Car(ABC):
	    @abstractmethod
	    def call_suv(self):
	        pass
	    @abstractmethod
	    def call_coupe(self):
	        pass
	# -------------------------------------------------------------
	class Benz(Car):
	    def call_suv(self):
	        return Gla()
	    def call_coupe(self):
	        return Cls()
	# -------------------------------------------------------------
	class Bmw(Car):
	    def call_suv(self):
	        return X1()
	    def call_coupe(self):
	        return M2()	
	# -------------------------------------------------------------
	class Suv(ABC):
	    @abstractmethod
	    def creating_suv(self):
	        pass
	class Coupe(ABC):
	    @abstractmethod
	    def creating_coupe(self):
	        pass
	# -------------------------------------------------------------
	class Gla(Suv):
	    def creating_suv(self):
	        print("This is your suv benz gla. . . ")
	class X1(Suv):
	    def creating_suv(self):
	        print("This is your suv bmw x1. . .")
	# -------------------------------------------------------------
	class Cls(Coupe):
	    def creating_coupe(self):
	        print("This is your coupe benz cls. . .")
	class M2(Coupe):
	    def creating_coupe(self):
	        print("This is your coupe bmw m2. . .")
	# -------------------------------------------------------------
	def client_suv(order):
	    suv = order.call_suv()
	    suv.creating_suv()
	def client_coupe(order):
	    coupe = order.call_coupe()
	    coupe.creating_coupe()
	# -------------------------------------------------------------
	"""Test the app"""
	client_coupe(Bmw())
	client_coupe(Benz())
	client_suv(Benz())
	client_suv(Bmw())


لینک مقاله : Factory vs Factory Method vs Abstract Factory

لینک مقاله دوم :‌ لینک

بهترین پاسخ
Reza Mobaraki ۳۰ مهر ۱۴۰۱، ۲۰:۱۸

سلام ارمین جان

اقای مبارکی پاسختون رو دادند

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

حتی در زمان مصاحبه برای دوستانی که تازه میخوان وارد یه شرکت بشن مصاحبه کننده ازشون انتظار زیادی درباره این مفاهیم نداره و یه جورایی اشنا بودن با این مفاهیم(نه مسلط بودن) فقط مزیت محسوب میشه

موفق باشید

پوریا شفیعی ۰۱ آبان ۱۴۰۱، ۰۷:۴۰