简单工厂模式通过接口来创建对象,根据传入的参数不同返回不同的类的实例,这样做的目的是隐藏对象创建时的逻辑。在具体实现上,有3个角色需要定义:
抽象产品类要定义抽象方法,具体产品类必须实现抽象方法,对于工厂模式的使用方来说,他们不必关心实例对象如何创建。
from abc import ABC, abstractmethod
class Fruit(ABC):
def __init__(self, name):
self.name = name
@abstractmethod
def make_juice(self):
pass
class Apple(Fruit):
def make_juice(self):
print(f"制作{self.name}汁")
class Grape(Fruit):
def make_juice(self):
print(f"制作{self.name}酒")
class FruitFactory():
@classmethod
def create_fruit(cls, name):
if name == 'apple':
return Apple('苹果')
elif name == 'grape':
return Grape("葡萄")
fruit1 = FruitFactory.create_fruit('apple')
fruit1.make_juice()
fruit2 = FruitFactory.create_fruit('grape')
fruit2.make_juice()
现在,我们来思考一个问题,当新增一种水果种类时,代码需要做哪些改动呢?就以Orange为例,你必须新增一个Orange类,这个类继承Fruit类,接下来,需要修改FruitFactory的create_fruit方法,当name为的值是orange时返回Orange的示例对象。
简单工厂模式的优点在于降低开发人员对实例对象创建的理解成本,值需要向接口里传入特定的实参就可以获得自己想要的实例对象。
简单工厂模式的缺点也十分明显,当具体产品角色非常多时,维护工厂角色就会变得繁琐困难,因此简单工厂模式更适合具体产品角色较少的场景。
QQ交流群: 211426309