最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
五莲县| 湘潭县| 许昌市| 桐乡市| 宁国市| 通辽市| 青冈县| 平顺县| 松原市| 凌源市| 镶黄旗| 盘山县| 四平市| 佳木斯市| 鹿泉市| 肥乡县| 昌江| 蕉岭县| 远安县| 宜阳县| 永安市| 合水县| 胶南市| 南郑县| 即墨市| 西平县| 瑞安市| 梁平县| 泽州县| 正宁县| 贡觉县| 繁峙县| 清水县| 定襄县| 出国| 天峨县| 鄂伦春自治旗| 双城市| 建阳市| 韶山市| 五寨县|