Factory--工厂方法

一、定义

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

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

二、应用场景

工厂方法模式的特征是:

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

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

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

三、类图

Factory--工厂方法

四、例子

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

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

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

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

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

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

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

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

分类:默认分类 时间:2012-01-07 人气:5
本文关键词:
分享到:

相关文章

  • POJ 3436 ACM Computer Factory(网络最大流) 2012-03-10

    http://poj.org/problem?id=3436 ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5286 Accepted: 1813 Special Judge Description As you know, all the computers used for ACM contests must be identical, so the participants c

  • 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory) 2012-05-09

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 简单工厂模式在cocos2d-x中怎么用,我们通过下面的小例子来了解一下。 假如我们在开发一款类似魔兽的RPG游戏,在游戏中会出现很多种族的角色,如:人族、兽族。 这些种族一般都会定义为一个类,如果兽族Orc类,人族Human类。 兽族、人族两个类都同样属于种族,那么我们可以

  • wipe什么意思?wipe data factory reset执行方法 2012-05-16

      wipe什么意思?就是数据程序清理。今天小志就教大家安卓手机怎么使用wipe,并且如何执行wipe菜单下wipe data factory reset。   一、wipe是什么意思   wipe从英文单词的字面意思来理解就是:揩,擦;揩干,擦净的意思,从刷机爱好者的专业角度来理解可以认为是一种对手机数据擦除的操作。关于wipe是什么意思比较专业的解答为:wipe就是恢复了出厂设置的意思,包括联系人、短信、安装的软件等全部删除。俗称硬启,恢复出厂设置。注意:wipe后app2sd和root权限

  • spring整合hibernate出现HibernateException: Unable to get the default Bean Validation factory 2012-05-30

    我的xml配置如下: hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=update com/xiaohui/domain/User.hbm.xml 错误信息如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sess

  • JavaScript模式之工厂模式(Factory)应用介绍 2012-09-13

    工厂模式也是对象创建模式之一,它通常在类或类的静态方法中去实现。构造对象的一种方式是使用new操作符,但使用new时正是针对实现编程,会造成“耦合”问题,与具体的类关系紧密。导致代码更脆弱,缺乏弹性,在复杂逻辑的项目中建议是面向接口编程。 先看简单工厂模式 代码如下: Person(name, age) { var obj = {} obj.name = name obj.age = age return obj } var p1 = Person('jack', 25) var p2 = Pe

  • 再议工厂模式(Abstract Factory)和DIP的关系 2012-09-25

    大多数人说的工厂模式,应该是指GOF设计模式里面的Abstract Factory模式。 这是一种很常见又很有用的模式。它和DIP原则又有什么关系呢? DIP原则 DIP: Dependency inversion principle。 DIP也就是依赖倒置原则,讲的是上层模块应该依赖于接口,具体类应该依赖于抽象接口(也就是被迫实现抽象接口)。因为抽象接口更接近于它的使用者(上层模块),所以看上去就像具体类依赖于上层模块一样,这才称之为依赖倒置。 如果严格按照DIP来讲,任何一条new语句就违反

  • Java 设计模式之工厂方法(Factory Method) 2012-11-01

    本文章给各位java爱好详细介绍关于Java 设计模式之工厂方法(Factory Method)的一些用法,这以图文方式介绍希望对各位有所帮助。 类型: 对象创建型模式 意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。 适用性: 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的

  • SGU154--Factorial (poj1401变形题--数论+二分) 2012-12-04

    154. Factorial time limit per test: 0.5 sec. memory limit per test: 4096 KB input: standard input output: standard output You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know

  • Design Pattern - Factory - 设计模式 - 工厂 2012-12-11

    Create All kinds of guns. 设计重点: 1 基类作接口 2 继承类是各种不同的类 3 构建工厂类,然后根据需要创造不同的类,可以传入关键字,或者索引等。 #pragma once #include #include using namespace std; //Base class class Gun { public: virtual string description() { return "Generic Gun"; } }; //Derived class cl

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.056 (s). 10 q(s)