# coding:utf-8
class Shape(object):
def draw(self):
raise NotImplementedError
class Circle(Shape):
def draw(self):
print("draw circle")
class Square(Shape):
def draw(self):
print("draw square")
class Rectangle(Shape):
def draw(self):
print('draw rectangle')
class ShapeFactory(object):
def getShape(self, shape):
if shape == 'Circle':
return Circle()
elif shape == 'Rectangle':
return Rectangle()
else:
return None
fac = ShapeFactory()
obj = fac.getShape('Circle')
obj.draw()
优点: 客户端使用统一的代码进行创建不同类的实例。
缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。