• 工厂方法模式


    这个和简单工厂有区别,简单工厂模式只有一个工厂,工厂方法模式对每一个产品都有相应的工厂
    好处:增加一个运算类(例如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对象
     

  • 相关阅读:
    给网站添加icon图标
    jquery动态改变元素内容
    jQuery判断checkbox是否选中的3种方法
    jquery datatable设置垂直滚动后,表头(th)错位问题
    网页弹出[Object HTMLDivElement],怎么取值?
    JS获取元素属性和自定义属性
    Thymeleaf显示Map集合数据
    带搜索框的select下拉框
    JQuery获取浏览器窗口的高度和宽度
    鼠标悬停在一个标签上时,显示一段文字
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14124117.html
Copyright © 2020-2023  润新知