اضافه کردن محصول با استفاده از Abstract Factory

پرسیده شده
فعالیت 1252 روز پیش
دیده شده 458 بار
0

سلام
با توجه به نمونه کدی که استاد پیاده سازی کرد

سوالم اینجاست که مثلا اگر فروشگاه من ۱۰۰۰ تا محصول متفاوت داشته باشد

آیا برای ۱۰۰۰ محصول باید کلاس detail , و هم price , و هم productBase تعریف کنیم ؟
خیلی شلوغ نمیشه؟

from abc import ABC, abstractmethod


class DetailBase(ABC):
    @abstractmethod
    def show(self):
        pass


class RugsDetail(DetailBase):

    def __init__(self, rugs):
        self.rugs = rugs

    def show(self):
        return f"rugs detail: {self.rugs._name}"


class RugsPrice(DetailBase):

    def __init__(self, rugs):
        self.rugs = rugs

    def show(self):
        return f"rugs price: {self.rugs._price}$"


class GiftCardDetail(DetailBase):
    def __init__(self, card):
        self.card = card

    def show(self):
        return f"company: {self.card.company}"


class GiftCardPrice(DetailBase):
    def __init__(self, card):
        self.card = card

    def show(self):
        return f"gift card min price: {self.card.min_price}\tmax price: {self.card.max_price}\t"


class ProductBase(ABC):
    @abstractmethod
    def detail(self):
        pass

    @abstractmethod
    def price(self):
        pass

    # @abstractmethod
    # def shipping(self):
    #     pass
class Rugs(ProductBase):

    def __init__(self, name, price):
        self._name = name
        self._price = price

    @property
    def detail(self):
        return RugsDetail(self)

    @property
    def price(self):
        return RugsPrice(self)


class GiftCard(ProductBase):

    def __init__(self, company, min_price, max_price):
        self.company = company
        self.min_price = min_price
        self.max_price = max_price

    @property
    def detail(self):
        return GiftCardDetail(self)

    @property
    def price(self):
        return GiftCardPrice(self)


if __name__ == "__main__":
    r1 = Rugs('persian rugs', 135)
    r2 = Rugs('nain rugs', 150)


    g1 = GiftCard('google', 20, 60)
    g2 = GiftCard('apple', 20, 60)

    products = [r1, r2, g1, g2]

    for product in products:
        print(product.detail.show())
        print(product.price.show())

 

فایل پیوست

Ahmad As
Ahmad As

30 آبان 99

3
حذف شده

سلام

هدف ما توی حل کردن این مثال دقیقا پنهان کردن این پیچیدگی، موقع ساخت محصول بوده.
یعنی همونطور که شما گفتین برای ساختن هر محصول ما (حداقل) ۳ آبجکت از ۳ کلاس مختلف میسازیم اما با توجه به الگوی Abstract Factory که انتخاب کردیم، این پیچیدگی وارد کدی که نوشتیم نمیشه و در آینده توسعه رو ساده‌تر می‌کنه.

این نکته رو هم اضافه کنم که تعداد آبجکت‌های ساخته شده ملاک بهینه بودن یا نبودن نیست، مراقب باشین که اشتباه نشه.

فایل پیوست

حسین رمضان پور

توسط

حسین رمضان پور

30 آبان 99