python设计模式 - 工厂模式之简单工厂
2019-02-11 本文已影响5人
RedGecko
python 环境
python==3.7.2
工厂模式简介
在面向对象中,“工厂”表示一个负责创建其他类型对象的类。客户端通过传参调用工厂类对象的不同方法,工厂类根据参数创建类对象并返回给客户端。这里通常会有个疑问,既然客户端可以自己创建类对象,为何还要通过工厂来创建呢?这就要说到工厂模式的优点啦。
- 松耦合
类对象的创建可以独立于类的实现方法 - 封装性好
客户端无需知道如何创建类对象,只需了解工厂类的接口,方法和参数,即可创建类对象。简化了客户端操作。 - 高扩展性
可轻松在工厂类中增加方法类创建其他类对象,而客户端无需修改代码 - 可控性强
工厂类的方法在返回对象时,可以重用现有对象,而客户端创建则每次都要返回新对象。
简单工厂模式
简单工厂模式并不能算作一种设计模式,更应该归类于一种编程习惯。它允许接口创建对象,而不用暴露对象的创建逻辑。
简单工厂模式实现
from abc import ABCMeta, abstractmethod
class Animal(metaclass=ABCMeta):
@abstractmethod
def run(self):
pass
class Dog(Animal):
def run(self):
print("dog running")
class Fish(Animal):
def run(self):
print("fish swimming")
class Bird(Animal):
def run(self):
print("bird flying")
class AnimalFactory(object):
@staticmethod
def animal_run(animal_type):
try:
eval(animal_type)().run()
except NameError:
print("animal_type not supported")
if __name__ == '__main__':
animal_factory = AnimalFactory()
animal_factory.animal_run('Bird')
animal_factory.animal_run('Fish')
animal_factory.animal_run('Dog')
animal_factory.animal_run('aaa')
简单工厂模式缺点
简单工厂模式最大的弊病在于,工厂类的职责过重,每增加一个类型,都要修改工厂类的代码,在工厂中管理的类型较多时,工厂逻辑将会过于复杂,难以维护。