python实现AbstractFactory模式
#-*-coding:utf-8-*-
'''
1,为创建一组(有多个类)相关或相互依赖的对象提供创建接口
'''
from abc import ABCMeta, abstractmethod, abstractproperty
class SmallMonster(): #小怪
__metaclass__ = ABCMeta #使得SmallMonster为抽象基类
def __init__(self):
pass
def name(self):
print u'牛头小怪'
class BigMonster(): #大怪
__metaclass__ = ABCMeta
def __init__(self):
pass
def name(self):
print u'伏地魔'
class SmallMonster_1(SmallMonster):
def say(self):
print u'牛头小怪A'
class SmallMonster_2(SmallMonster):
def say(self):
print u'牛头小怪B'
class BigMonster_1(BigMonster):
def say(self):
print u'伏地魔A'
class BigMonster_2(BigMonster):
def say(self):
print u'伏地魔B'
class AbstractFactory():
__metaclass__ = ABCMeta
def __init__(self):
pass
def createSmallMonster(self):
pass
def createBigMonster(self):
pass
class ConcreteFactory_1(AbstractFactory):
def createSmallMonster(self):
return SmallMonster_1()
def createBigMonster(self):
return BigMonster_1()
class ConcreteFactory_2(AbstractFactory):
def createSmallMonster(self):
return SmallMonster_2()
def createBigMonster(self):
return BigMonster_2()
if __name__ == "__main__":
cf_1 = ConcreteFactory_1()
sMonster_1 = cf_1.createSmallMonster()
bMonster_1 = cf_1.createBigMonster()
sMonster_1.say()
bMonster_1.say()
cf_2 = ConcreteFactory_2()
sMonster_2 = cf_2.createSmallMonster()
bMonster_2 = cf_2.createBigMonster()
sMonster_2.say()
bMonster_2.say()