意義:
定義一個用于建立對象的接口,讓子類決定執行個體化哪一個類。Factory Method 使一個類的執行個體化延遲到其子類。
适用性:
當一個類不知道他所必須建立的對象的類的時候。
當一個類希望有他的子類來指定他所建立的對象的時候
當類将建立對象的職責委托給多個子類中的某一個。
代碼:
class ShapeFactory(object):
'''工廠類'''
def getShape(self):
return self.shape_name
class Circle(ShapeFactory):
def __init__(self):
self.shape_name = "Circle"
def draw(self):
print('draw circle')
class Rectangle(ShapeFactory):
def __init__(self):
self.shape_name = "Retangle"
def draw(self):
print('draw Rectangle')
class Shape(object):
'''接口類,負責決定建立哪個ShapeFactory的子類'''
def create(self, shape):
if shape == 'Circle':
return Circle()
elif shape == 'Rectangle':
return Rectangle()
else:
return None
fac = Shape()
obj = fac.create('Circle')
obj.draw()
obj.getShape()
優點:
使用者不需要修改代碼
缺點:
當使用者需要添加新的運算類的時候,不僅需新加運算類,還需要修改工廠類,違反了開放封閉原則