工厂方法模式

这个和简单工厂有区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂
好处:增加一个运算类(例如N次方类),只需要增加运算类和相对应的工厂,两个类,不需要修改工厂类。
缺点:增加运算类,会修改客户端代码,工厂方法只是把简单工厂的内部逻辑判断移到了客户端进行
 
示例代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
Factory Method
'''
'''
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。
首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。   
工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作
由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产
对应的产品。   
工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。
''' 
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 ShapeInterfaceFactory(object):
    '''接口基类'''
    def create(self):
        '''把要创建的工厂对象装配进来'''
        raise  NotImplementedError
 
class ShapeCircle(ShapeInterfaceFactory):
    def create(self):
        return Circle()
 
class ShapeRectangle(ShapeInterfaceFactory):
    def create(self):
        return Rectangle()
 
shape_interface = ShapeCircle()
obj = shape_interface.create()
obj.getShape()
obj.draw()
 
shape_interface2 = ShapeRectangle()
obj2 = shape_interface2.create()
obj2.draw()
执行结果:
ShapeFactory(父类 or 基类):提取出所有子类的重复方法代码
Circle(Shape子类 or 派生类):作用为画圆形
Rectangle(Shape子类 or 派生类):作用为画矩形
ShapeInterfaceFactory(父类 or 基类):提取出所有子类的重复方法代码
ShapeCircle(ShapeInterfaceFactory的子类 or 派生类):作用为创建指定的Circle对象
ShapeRectangle(ShapeInterfaceFactory的子类 or 派生类):作用为创建指定的Rectangle对象
 

posted @ 2020-12-12 11:42  盲仔不瞎忙  阅读(56)  评论(0编辑  收藏  举报