用装饰者模式实现:一个基本的市场模型。
时间: 2024-05-10 07:21:23 浏览: 64
装饰者模式的典型应用。
4星 · 用户满意度95%
在市场模型中,我们有一个基本的市场类,它包含了一些基本的属性和方法,比如商品名称、价格、销售数量等。现在我们希望在这个基本的市场模型上添加一些装饰功能,比如促销价格、会员价格等。
首先,我们需要定义一个抽象的装饰者类,它继承自市场类,并且包含一个指向市场类的引用。这个抽象的装饰者类中,我们可以重写市场类的一些方法,来实现装饰功能。
```python
class Market:
def __init__(self, name, price, quantity):
self.name = name
self.price = price
self.quantity = quantity
def get_name(self):
return self.name
def get_price(self):
return self.price
def get_quantity(self):
return self.quantity
class MarketDecorator(Market):
def __init__(self, market):
self.market = market
def get_name(self):
return self.market.get_name()
def get_price(self):
return self.market.get_price()
def get_quantity(self):
return self.market.get_quantity()
```
接下来,我们可以定义一些具体的装饰者类,来实现不同的装饰功能。比如,我们可以实现一个促销价格的装饰者类,它可以将市场类的价格降低一定比例。
```python
class PromotionDecorator(MarketDecorator):
def __init__(self, market, discount):
super().__init__(market)
self.discount = discount
def get_price(self):
return self.market.get_price() * self.discount
```
还可以实现一个会员价格的装饰者类,它可以将市场类的价格降低一定比例,并且加上会员积分。
```python
class MemberDecorator(MarketDecorator):
def __init__(self, market, discount, points):
super().__init__(market)
self.discount = discount
self.points = points
def get_price(self):
return self.market.get_price() * self.discount + self.points
```
使用装饰者模式,我们可以动态地为市场模型添加不同的装饰功能,而且这些装饰功能可以任意组合。例如,我们可以先添加一个促销价格的装饰者,再添加一个会员价格的装饰者,从而实现同时享受促销和会员折扣的功能。
```python
market = Market("apple", 10, 100)
promotion_market = PromotionDecorator(market, 0.8)
member_market = MemberDecorator(promotion_market, 0.9, 5)
print(member_market.get_name()) # apple
print(member_market.get_price()) # 9
print(member_market.get_quantity()) # 100
```
总之,装饰者模式可以很好地扩展现有的类,让它们具有更多的功能和灵活性。在实际应用中,我们可以根据具体的需求,选择不同的装饰者来实现所需的功能。
阅读全文