python设计模式 - 工厂模式之简单工厂

2019-02-11  本文已影响5人  RedGecko

python 环境

python==3.7.2

工厂模式简介

在面向对象中,“工厂”表示一个负责创建其他类型对象的类。客户端通过传参调用工厂类对象的不同方法,工厂类根据参数创建类对象并返回给客户端。这里通常会有个疑问,既然客户端可以自己创建类对象,为何还要通过工厂来创建呢?这就要说到工厂模式的优点啦。

  1. 松耦合
    类对象的创建可以独立于类的实现方法
  2. 封装性好
    客户端无需知道如何创建类对象,只需了解工厂类的接口,方法和参数,即可创建类对象。简化了客户端操作。
  3. 高扩展性
    可轻松在工厂类中增加方法类创建其他类对象,而客户端无需修改代码
  4. 可控性强
    工厂类的方法在返回对象时,可以重用现有对象,而客户端创建则每次都要返回新对象。

简单工厂模式

简单工厂模式并不能算作一种设计模式,更应该归类于一种编程习惯。它允许接口创建对象,而不用暴露对象的创建逻辑。

简单工厂模式实现

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')

简单工厂模式缺点

简单工厂模式最大的弊病在于,工厂类的职责过重,每增加一个类型,都要修改工厂类的代码,在工厂中管理的类型较多时,工厂逻辑将会过于复杂,难以维护。

上一篇下一篇

猜你喜欢

热点阅读