zoukankan      html  css  js  c++  java
  • 简单工厂模式

    说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。
     
    意图:
    定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 
     
    适用性:
    当一个类不知道它所必须创建的对象的类的时候。
    当一个类希望由它的子类来指定它所创建的对象的时候。
    当类将创建对象的职责委托给多个子类中的某一个。
     
    示例代码:
    #!/usr/bin/env python 
    #-*- coding:utf-8 -*-
    '''
    simple Factory Method
    '''
    class Shape(object):
        '''
        父类
        '''
        def draw(self):
            raise NotImplementedError
     
    class Circle(Shape):
        '''
        Shape子类
        '''
        def draw(self):
            print('draw circle')
     
    class Rectangle(Shape):
        '''
        Shape的子类
        '''
        def draw(self):
            print('draw Rectangle')
     
    class ShapeFactory(object):
        '''
        工厂模式:暴露给用户去调用的,
        用户可通过该类进行选择Shape的子类进行实例化
        '''
        def create(self, shape):
            if shape == 'Circle':
                return Circle()
            elif shape == 'Rectangle':
                return Rectangle()
            else:
                return None
     
    fac = ShapeFactory() #实例化工厂类
    obj = fac.create('Circle') #实例化Shape的Circle子类
    obj.draw()
    执行结果:
     
    Shape(父类 or 基类):提取出所有子类的重复方法代码
    Circle(Shape子类 or 派生类):作用为画圆形
    Rectangle(Shape子类 or 派生类):作用为画矩形
    ShapeFactory(新式类):该类作用为用户可根据该类对象创建指定的Shape子类对象(Circle or Rectangle)
    优点:客户端不需要修改代码。
    缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。
     

  • 相关阅读:
    2018-8-10-用-sim-卡加密保护资金
    2018-8-10-用-sim-卡加密保护资金
    2018-8-10-win10-uwp-MVVM-语义耦合
    2018-8-10-win10-uwp-MVVM-语义耦合
    2019-9-3-win10-uwp-收集-DUMP-文件
    2019-9-3-win10-uwp-收集-DUMP-文件
    PHP htmlspecialchars() 函数
    PHP htmlspecialchars_decode() 函数
    PHP htmlentities() 函数
    PHP html_entity_decode() 函数
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123925.html
Copyright © 2011-2022 走看看