五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一分鐘了解composite pattern

2023-04-23 21:19 作者:bibnoifasdfadf  | 我要投稿

Composite Pattern 是一個在 Python 中使用廣泛的設計模式。它允許你將對象組合成樹形結(jié)構(gòu),以表示部分整體的層次結(jié)構(gòu)。這個模式使得客戶端能夠統(tǒng)一處理單個對象和組合對象。

?下面我們會用實例來詳細說明這個模式。

?在這個例子中,我們假設有一家服裝店,賣襯衫、褲子和鞋子。每個產(chǎn)品都有一個名稱和價格。我們需要設計一個程序來計算一組產(chǎn)品的總價格。這些產(chǎn)品可以是單個產(chǎn)品,也可以是包含其他產(chǎn)品的組合產(chǎn)品。

?首先,我們定義一個抽象基類 Product,它有兩個方法 get_name() 和 get_price()。這個類會被所有產(chǎn)品類繼承。

from abc import ABC, abstractmethod

?class Product(ABC):

? ? @abstractmethod

? ? def get_name(self):

? ? ? ? pass

? ? ?@abstractmethod

? ? def get_price(self):

? ? ? ? pass

然后我們定義三個具體產(chǎn)品類,分別是 Shirt、Pants 和 Shoes。每個產(chǎn)品都有自己的名稱和價格。

class Shirt(Product):

? ? def __init__(self, name, price):

? ? ? ? self.name = name

? ? ? ? self.price = price

? ? ?def get_name(self):

? ? ? ? return self.name

? ? ?def get_price(self):

? ? ? ? return self.price

?class Pants(Product):

? ? def __init__(self, name, price):

? ? ? ? self.name = name

? ? ? ? self.price = price

? ? ?def get_name(self):

? ? ? ? return self.name

? ? ?def get_price(self):

? ? ? ? return self.price

?class Shoes(Product):

? ? def __init__(self, name, price):

? ? ? ? self.name = name

? ? ? ? self.price = price

? ? ?def get_name(self):

? ? ? ? return self.name

? ? ?def get_price(self):

? ? ? ? return self.price

接下來,我們定義一個組合產(chǎn)品類 ComboProduct,它是一個包含多個產(chǎn)品的組合產(chǎn)品。它有一個名稱和一個價格,以及一個產(chǎn)品列表。這個類同時也是一個產(chǎn)品,因此它繼承了 Product。

class ComboProduct(Product):

? ? def __init__(self, name, *products):

? ? ? ? self.name = name

? ? ? ? self.products = products

? ? ?def get_name(self):

? ? ? ? return self.name

? ? ?def get_price(self):

? ? ? ? return sum(product.get_price() for product in self.products)

最后,我們來測試這個程序。我們創(chuàng)建了兩個產(chǎn)品實例 Shirt 和 Pants,以及一個組合產(chǎn)品實例 ShirtPantsCombo,它包含了這兩個產(chǎn)品。然后我們將這些產(chǎn)品加入到另一個組合產(chǎn)品實例 SalesCombo,計算它們的總價格。

shirt = Shirt('Nike shirt', 100)

pants = Pants('Adidas pants', 200)

shirt_pants_combo = ComboProduct('Shirt and pants combo', shirt, pants)

?shoe = Shoes('Reebok shoes', 300)

sales_combo = ComboProduct('Sales combo', shirt_pants_combo, shoe)

?total_price = sales_combo.get_price()

?print(f'Total price of {sales_combo.get_name()}: {total_price}')

運行這個程序,我們可以看到最終的總價格為 600,也就是三個產(chǎn)品的價格之和。

?這個例子中,我們使用 Composite Pattern 將單個產(chǎn)品和組合產(chǎn)品統(tǒng)一處理,使得客戶端代碼更加簡潔和易于擴展。如果我們要增加更多的產(chǎn)品或組合產(chǎn)品,我們只需要繼承 Product 類并實現(xiàn) get_name() 和 get_price() 方法即可。


一分鐘了解composite pattern的評論 (共 條)

分享到微博請遵守國家法律
伊宁县| 建水县| 凤台县| 射洪县| 灵璧县| 岗巴县| 东台市| 东光县| 沛县| 大英县| 黔西| 华安县| 阿鲁科尔沁旗| 榆中县| 体育| 隆安县| 当雄县| 淮南市| 九台市| 辽宁省| 襄城县| 翁牛特旗| 濮阳县| 临泉县| 新宾| 成武县| 宁晋县| 道孚县| 游戏| 临汾市| 尼木县| 博兴县| 大关县| 龙胜| 油尖旺区| 普宁市| 利津县| 廉江市| 益阳市| 沈丘县| 上饶市|