工厂模式

工厂模式

简单工厂模式

通过工厂类来实现创造产品类

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()
#买了苹果
#买了奶茶
#买了苹果
#买了茶

一个工厂可以生产多种产品

posted @   且任荣枯  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
点击右上角即可分享
微信分享提示