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

  • 相关阅读:
    控制HTML Input只能输入数字和小数点
    VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
    C# ListView用法详解
    wordpress学习五: 通过wordpress_xmlrpc的python包远程操作wordpress
    用IDEA开发简单的Servlet
    在centOS中安装mongodb
    simhash-- 一种文档去重的算法
    一个java实现的简单的4则运算器
    搭建ZooKeeper
    java入门--4111:判断游戏胜者-Who Is the Winner
  • 原文地址:https://www.cnblogs.com/absoluteli/p/14123925.html
Copyright © 2011-2022 走看看