文件目录 DesignPattern\SimpleFactory.py
# -*- coding: utf-8 -*-
""" 非简单工厂 要记住住各种调用接口,子类的名字都要记住,直接实例化子类 """
class Shape(object):
pass
class Triangle(Shape):
def draw(self):
print "三角形"
class Square(Shape):
def draw(self):
print "正方形"
""" 简单工厂方法 """
import importlib
class Shape(object):
def draw(self):
raise NotImplementedError
class Circle(Shape):
def draw(self):
print "圆"
class Triangle(Shape):
def draw(self):
print "三角"
class ShapeFactory(object):
# 仅这一个图形工厂
@classmethod
def create(cls, shape):
# 绝对路径导入,优于相对路径
try:
router = importlib.import_module('DesignPattern.SimpleFactory')
return getattr(router, shape)()
# 此处可以反射获取,缺点也再此,需要新图形时,需要再次新加代码
except AttributeError as at:
print '无 %s 图形' % shape
if __name__ == '__main__':
""" 非简单工厂 """
t = Triangle()
s = Square()
t.draw()
s.draw()
fac = ShapeFactory()
# 想画图
obj = fac.create('Triagle')
# 需要画什么 用这个统一的接口创建
# 将类的实例化延迟到了子类,比起上一个,进一步的归纳统一了接口
obj.draw()