工厂模式

定义

提供一个接口,用于创建对象。但是工厂本身并不能直接实例化对象,而是要先经过子类的继承,从而重写方法,来创建定制化的实例对象。
即,一个工厂可以生成多种定制化的对象,类似于派生。

用途

使得代码更加通用,能够灵活的创建对象。创建对象与使用对象代码解耦,添加新类很容易。

示例:

1. 经典的简易单例模式

通过对抽象的工厂类进行继承和重写,定义新的用于实例化对象的类。

>>> from abc import ABCMeta, abstractmethod
>>> class ToyFactory(metaclass=ABCMeta):
        @abstractmethod
        def describe(self):
            pass
        def made_from(self):
            print("Made from ToyFactory!")
        
>>> class DogToy(ToyFactory):
        def describe(self):
            print("A dog toy!")
            
>>> class CatToy(ToyFactory):
        def describe(self):
            print("A cat toy!")
                        
>>> dogToy = DogToy()
>>> catToy = CatToy()

>>> dogToy.made_from()
Made from ToyFactory!

>>> dogToy.describe()
A dog toy!

>>> catToy.made_from()
Made from ToyFactory!

>>> catToy.describe()
A cat toy!

通过对ToyFactory的继承并分别由DogToyCatToy对抽象函数的重写,使得工厂可以定制化的生成类。这样生成的类,具有工厂类定义的模板,但是却有着不同的函数内容。