background image

Java 教程:Java 中应用设计模式 Factory Method

 FactoryMethod 是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定
具体实例化哪一个类.

 

当一个类无法预料要创建哪种 类的对象或是一个类需要由子类来指

定创建的对象时我们就需要用到 Factory Method 模式了.简单说来,Factory Method 可以根
据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父
类.Factory Method 把创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了
程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类 . 通常我们将
Factory Method 作为一种标准的创建对象的方法,当发现需要更多的灵活性的时候,就开始
考虑向其它创建型模式转化
  简单分析
  图 1 是 Factory Method 模式的结构图,这里提供了一些术语,让我们可以进行更方便的
描述:
  Product: 需要创建的产品的抽象类.
  ConcreteProduct: Product 的子类,一系列具体的产品.
  Creator: 抽象创建器接口,声明返回 Product 类型对象的 Factory Method.
  ConcreteCreator: 具体的创建器,重写 Creator 中的 Factory Method,返回 ConcreteProduct
类型的实例.

  图 1: Factory Method 模式结构

  

  由此可以清楚的看出这样的平行对应关系 : Product <====> Creator ; ConreteProduct 
<====> ConreteCreator

 

   抽象产品对应抽象创建器,具体产品对应具体创建器.这样做的好处是什么呢?为什么
我们不直接用具体的产品和具体的创建器完成需求呢?

 

实际上我们也可以这 样做.但通过

Factory Method 模 式 来 完 成 , 客 户 (client) 只 需 引 用 抽 象 的 Product 和 Creater, 对 具 体 的
ConcreteProduct

 

和 ConcreteCreator 可以毫不关心,这样做我们可以获得额外的好处:

 

  首先客户端可以统一从抽象创建器获取产生的实 例,Creator 的作用将 client 和产品创
建过程分离开来,客户不用操心返回的是那一个具体的产品,也不用关心这些产品是如何创
建的.  

同 时,ConcreteProduct 也被隐藏在 Product 后面,ConreteProduct 继承了 Product 的所有

属 性 ,

 

并 实 现 了 Product 中 定 义 的 抽 象 方 法 , 按 照 Java 中 的 对 象 造 型 (cast) 原 则 , 通 过