工厂模式
工厂模式
简单工厂模式
通过工厂类来实现创造产品类
class Fruit():
def buy(self,money):
print(f"买了{money}的水果")
class Drink():
def buy(self,money):
print(f"买了{money}的饮料")
class Snake():
def buy(self,money):
print(f"买了{money}的零食")
class Shop:
def support_commodity(self,need):
if need == "fruit":
return Fruit()
elif need == "drink":
return Drink()
elif need == "Snake":
return Snake()
else:
raise TypeError(f"没有{need}这类商品")
if __name__ == "__main__":
fruit = Fruit().buy(100)
drink = Drink().buy(100)
snake = Snake().buy(100)
shop = Shop()
need = shop.support_commodity("fruit")
need.buy(100)
买了100的水果
买了100的饮料
买了100的零食
买了100的水果
客户端不需修改代码
但是在需要添加新的产品时需要修改工厂类代码
工厂方法模式
from abc import ABCMeta,abstractmethod
class Fruit():
def buy(self):
print("买水果")
class Drink():
def buy(self):
print("买饮料")
# 抽象工厂
class AbstractFactory(metaclass=ABCMeta):
@abstractmethod
def support_commodity(self):
pass
# Fruity 工厂
class FruitFactory(AbstractFactory):
def support_commodity(self):
return Fruit()
# Drink 工厂
class DrinkFactory(AbstractFactory):
def support_commodity(self):
return Drink()
if __name__ == "__main__":
FruitFactory().support_commodity().buy()
DrinkFactory().support_commodity().buy()
#买水果
#买饮料
每添加一个类需要添加一个工厂
抽象工厂模式
from abc import ABCMeta,abstractmethod
class Apple():
def buy_fruit(self):
print("买了苹果")
class Orange():
def buy_fruit(self):
print("买了橘子")
class Tea():
def buy_drink(self):
print("买了茶")
class NaiTea():
def buy_drink(self):
print("买了奶茶")
class AbstractFactory(metaclass=ABCMeta):
@abstractmethod
def support_fruit(self):
pass
@abstractmethod
def support_drink(self):
pass
# 奶茶店
class NaiTeaShop(AbstractFactory):
def support_drink(self):
return NaiTea()
def support_fruit(self):
return Apple()
# 茶馆
class TeaShop(AbstractFactory):
def support_drink(self):
return Tea()
def support_fruit(self):
return Apple()
if __name__=="__main__":
NaiTeaShop().support_fruit().buy_fruit()
NaiTeaShop().support_drink().buy_drink()
TeaShop().support_fruit().buy_fruit()
TeaShop().support_drink().buy_drink()
#买了苹果
#买了奶茶
#买了苹果
#买了茶
一个工厂可以生产多种产品
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇