python 工厂模式

工厂模式, 顾名思义是用来生产对象, 用于相似的类比较多的情况,
使用工厂类管理更清晰且有效.

假设我们有戴尔和惠普的电脑需要生产:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Dell:
def __repr__(self):
return 'Dell'

class Hp:
def __repr__(self):
return 'Hp'

if __name__ == "__main__":
d = Dell()
h = Hp()
print(d)
print(h)

不使用工厂时只能直接产生对象.

简单工厂模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class SimpleFactory:
products = {'dell': Dell, 'hp': Hp}
@staticmethod
def product(name):
if name.lower() in SimpleFactory.products:
return SimpleFactory.products[name.lower()]()
else:
return None

if __name__ == "__main__":
f = SimpleFactory
print(f.product('hp'))
print(f.product('dell'))
print(f.product('asus'))

此时我们就可以使用简单工厂生产了.

工厂方法模式

在上文的基础上如果新增厂商 ASUS, 则需要修改工厂类, 这就违反了开闭原则,
在扩展新类时尽量不修改原有代码.

所以我们可以抽象原有的简单工厂类, 使得每个产品都有自己的工厂.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class AbstractFactory(ABC):
@abstractmethod
def product(self):
pass

class DellFactory(AbstractFactory):
def product(self):
return Dell()

class HpFactory(AbstractFactory):
def product(self):
return Hp()

if __name__ == "__main__":
f1 = DellFactory()
f2 = HpFactory()
print(f1.product())
print(f2.product())

抽象工厂模式

在工厂方法模式的基础上, 一个工厂可以生产同一品牌的类产品.