工厂模式
且任容枯 Lv4

工厂模式

简单工厂模式

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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的水果

客户端不需修改代码

但是在需要添加新的产品时需要修改工厂类代码

工厂方法模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()

#买水果
#买饮料

每添加一个类需要添加一个工厂

抽象工厂模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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()
#买了苹果
#买了奶茶
#买了苹果
#买了茶

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