工厂模式

工厂模式

简单工厂模式

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

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 @ 2025-02-02 22:50  且任荣枯  阅读(9)  评论(0)    收藏  举报