zoukankan      html  css  js  c++  java
  • Factory——工厂方法

     一、定义

            GOF上对工厂方法的意图如此描述:定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method使一个类的实例化延迟到其子类。

             作为类的开发者,我们通常会在类中提供构造器方法以便客户代码实例化该类。然而有时候,客户代码并不清楚该对几个类中的哪一类进行实例化。可以用工厂模式定义一个用于创建对象的接口,同时控制对哪个类进行的实例化。


    二、应用场景

             工厂方法模式的特征是:

             (1)方法创建了一个新的对象;

             (2)方法的返回类型为一个抽象类或接口;

             (3)有若干个类实现了上述抽象类型。

           

    三、类图


                                 

    四、例子

           (1)工厂方法最典型的一个例子就是在迭代器模式中的应用,这里的工厂方法链接了两个平行的类层次结构。

            当一个类将它的一些职责委托给一个独立的类时,就产生了平行类层次。迭代器模式中,各个组合类型将遍历元素的操作独立出

    来,形成了迭代器类层次。

            每个组合类型都和一个相应类型的迭代器对应。组合类的对象需要实例化对应自己的迭代器(通过CreateIterator方法),这里的

    CreateIterator方法就是工厂方法。 具体代码可以看之前的迭代器模式日志

          (2)工厂方法还能为子类提供hook,用工厂方法在一个类的内部创建对象通常比直接创建对象更为灵活。

            GOF的代码示例里利用了MazeGame的例子,基类提供了Maze,Room,Wall等的工厂方法默认实现。子类通过重载这些方法,

    可以利用createMaze方法创建带有炸弹的迷宫。这样更有灵活性,由子类决定实例化哪个类型的迷宫组件。

  • 相关阅读:
    生成指定规模大小的redis cluster对关系
    根据ip列表模拟输出redis cluster的主从对应关系
    获取redis实例绑定cpu的情况
    通过shell模拟redis-trib.rb info的输出
    又一种获取redis cluster slots分布的小脚本
    第3种方法获取redis cluster主从关系
    Lamada
    Linq笔记
    推荐博文
    SQL server 自带存储过程 sp_rename
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3509126.html
Copyright © 2011-2022 走看看