抽象工厂,把共用的部分写成抽象类,后面的类继承抽象类,再重写各子类的方法===类似于java 重载
# coding=utf-8 __author__ = 'mac' #导入开发包 abc.ABCMeta是用来生成抽象基础类的元类,它生成的类可以被直接继承 from abc import ABCMeta class StandardFactory(object): ''' 抽象工厂 @staticmethod的作用:可以直接通过类名直接调用方法:类.方法: StandardFactory.get_factory('dog') ''' @staticmethod def get_factory(factory): ''' 根据参数找到对实际操作的工厂 ''' if factory=='cat': return CatFactory() elif factory=='dog': return DogFactory() raise TypeError('Unknow Factory.') #创建DogFactory类 class DogFactory(object): def get_pet(self): #返回Dog()类的内容,return可以返回一个方法,类,值 return Dog() class CatFactory(): def get_pet(self): # 返回Dog()类的内容 return Cat() #创建一个pet宠物基类。Dog,Cat都属于是pet类,它们都有吃的方法,只要定义一个抽象方法,不需要实例化, # 用于在后面的具体的类中实例化,Dog类中重写eat方法 class Pet(object): #ABCMeta会让这个类在注册后添加很多基础抽象基类 __metaclass__ = ABCMeta def eat(self): pass #Dog应该做什么 class Dog(Pet): #重写父类的eat()方法 def eat(self): return 'Dog Food is bone' class Cat(Pet): #重写父类的eat()方法 def eat(self): return 'Cat Food is fish' if __name__=="__main__": factory=StandardFactory.get_factory('dog') pet=factory.get_pet() print pet.eat()