天天看點

簡單工廠模式

意義:

定義一個用于建立對象的接口,讓子類決定執行個體化哪一個類。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()
           

優點:

使用者不需要修改代碼
           

缺點:

當使用者需要添加新的運算類的時候,不僅需新加運算類,還需要修改工廠類,違反了開放封閉原則