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)
    优点:客户端不需要修改代码。
    缺点: 当需要增加新的运算类的时候,不仅需新加运算类,还要修改工厂类,违反了开闭原则。
     

  • 相关阅读:
    Python 基础语法学习 1 -- Print
    Using CMD to create Android automation environment
    Java学习随笔之9:AWT编程
    Java学习随笔之8: 异常处理
    Android自动化测试2:Demo code
    Android自动化测试1:环境准备
    Java学习随笔之7:java 集合
    Java学习随笔之6:基本类库
    Java学习随笔之5: 面向对象(下)
    Java学习随笔之4:面向对象(上)
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123925.html
Copyright © 2011-2022 走看看