`

工厂方法

阅读更多



 定义一个用于创建对象的接口,让子类决定实例化哪一个类。
Factory Method使一个类的

实例化延迟到其子类。

   

适用性

在下列情况下可以使用Factory Method模式:

 当一个类不知道它所必须创建的对象的类的时候。

 当一个类希望由它的子类来指定它所创建的对象的时候。

 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类

是代理者这一信息局部化的时候。

 

工厂方法模式的结构
    在工厂方法模式中,一般都有一个平行的等级结构,也就是说工厂和产品是对应的的。抽象工厂对应抽象产品,具体工厂对应具体产品。简单的示意图如下:

 

 从上图可以看出,工厂方法模式的系统涉及到了以下角色:
    抽象工厂角色:与应用程序无关,任何在模式中创建对象的工厂必须实现这个接口。
    具体工厂角色:实现了抽象工厂接口的具体Java类,含有与引用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。
    抽象产品角色:工厂方法所创建产品对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
    具体产品角色:这个角色实现了抽象产品角色所声名的接口。工厂方法所创建的每个具体产品对象都是某个具体产品角色的实例。

应用场景示例:

 



 

 

简单工厂模式与工厂方法模式大PK

1. 结构复杂度

从这个角度比较,显然简单工厂模式要占优。简单工厂模式只需一个工厂类,而工厂方法模式的工厂类随着产品类个数增加而增加,这无疑会使类的个数越来越多,从而增加了结构的复杂程度。

2.代码复杂度

代码复杂度和结构复杂度是一对矛盾,既然简单工厂模式在结构方面相对简洁,那么它在代码方面肯定是比工厂方法模式复杂的了。简单工厂模式的工厂类随着产品类的增加需要增加很多方法(或代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简洁。

3.客户端编程难度

工厂方法模式虽然在工厂类结构中引入了接口从而满足了OCP,但是在客户端编码中需要对工厂类进行实例化。而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。

4.管理上的难度

这是个关键的问题。

我们先谈扩展。众所周知,工厂方法模式完全满足OCP,即它有非常良好的扩展性。那是否就说明了简单工厂模式就没有扩展性呢?答案是否定的。简单工厂模式同样具备良好的扩展性——扩展的时候仅需要修改少量的代码(修改工厂类的代码)就可以满足扩展性的要求了。尽管这没有完全满足OCP,但笔者认为不需要太拘泥于设计理论,要知道,sun提供的java官方工具包中也有想到多没有满足OCP的例子啊(java.util.Calendar这个抽象类就不满足 OCP,具体原因大家可以分析下)。

然后我们从维护性的角度分析下。假如某个具体产品类需要进行一定的修改,很可能需要修改对应的工厂类。当同时需要修改多个产品类的时候,对工厂类的修改会变得相当麻烦。反而简单工厂没有这些麻烦,当多个产品类需要修改是,简单工厂模式仍然仅仅需要修改唯一的工厂类

 

 

Abstract Factory模式与Factory Method模式的主要区别

1 Factory Method采用的是工厂类继承机制生成子工厂类重载该工厂方法在重载的方法中生成目标对象。而Abstract Factory强调的是对象组合机制,由在父工厂内定义不同的子工厂对象来负责不同的目标对象的创建。再深入一点理解:

Factory Method模式中,产品(目标对象)的使用者可能需要使用具体的子工厂来生成该产品;Abstract Factory模式则采用传参数的形式直接在父工厂内决定该产品对象应该由哪一个子工厂生产。也就是说,Abstract Factory模式中,跟客户打交道的只有抽象工厂与抽象产品,客户不需要知道产品由哪个工厂生产,也不需要知道被生产的是哪一种具体的产品。

Factory Method模式中,省城的对象产品只限定于某一类产品;Abstract Factory模式则可以提供多个生产接口生成多类产品

Abstract Factory模式Factory Method模式的更高层次的抽象,也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况

 

简单一点说,Abstract Factory模式通过抽象工厂为客户(调用者)生成多类产品,抽象工厂负责管理子工厂对象,子工厂负责生成某一类具体的产品对象。

 

 


 


 

Jdk中工厂方法的应用:
1 java.util.collection提供的iterator对象
java list返回iterator和listiterator
AbstractList.java
 public Iterator<E> iterator() {
	return new Itr();
    }
private class Itr implements Iterator<E> {
	。。。。。。
	}

CopyOnWriteArrayList.java

public Iterator<E> iterator() {
        return new COWIterator<E>(array(), 0);
    }

AbstractlinkList.java
 public Iterator iterator() {
        return listIterator();
    }

    public ListIterator listIterator() {
        return new LinkedListIterator(this, 0);
}

2.java.beans
  public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException {
	return Beans.instantiate(cls, beanName, null, null);
	}
 


 

 

 

 

 

 

  • 大小: 27.1 KB
  • 大小: 46.5 KB
  • 大小: 72.1 KB
分享到:
评论

相关推荐

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    简单工厂-工厂方法-抽象工厂 对比总结

    本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。 **简单工厂模式** 是最基础的工厂模式形式,它提供一个静态方法或类来创建对象。在这个模式中,工厂是负责创建对象的中心...

    工厂方法模式的C语言实现

    工厂方法模式是一种设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,当我们创建对象时,不会直接实例化具体的产品类,而是通过一个工厂类来创建。这样做的好处是,当需要添加新的产品...

    软件设计之工厂方法模式,源代码

    ### 软件设计之工厂方法模式解析及Java实现 #### 一、工厂方法模式概述 工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法...

    java工厂方法模式

    Java工厂方法模式 Java工厂方法模式是一种创建型模式,它属于类的创建型模式。该模式的主要思想是,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成...

    工厂方法模式uml类图

    java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式

    设计模式-工厂方法模式

    工厂方法模式作为创建型模式中的一种,提供了一种创建对象的优雅方式,它不仅使对象的创建与使用分离,还极大地提高了系统的扩展性和灵活性。本文将深入探讨工厂方法模式的内部机制,以及通过反射和配置文件技术增强...

    用工厂方法模式重构简易计算器 源代码+实验报告

    《工厂方法模式在简易计算器重构中的应用》 在软件工程中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案。工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际...

    设计模式之工厂方法

    这个接口就是工厂方法,让子类决定实例化哪一个类,工厂方法让类的实例化推迟到子类。 在Java编程中,工厂方法模式通常涉及到以下几个关键角色: 1. 抽象产品(Abstract Product):这是产品的抽象接口,定义了产品...

    工厂方法模式代码示例

    工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 工厂方法模式的核心思想是...

    工厂方法模式源代码

    工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,它定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这个模式使类的实例化延迟到了子类,也就是所谓的“多态性工厂”。在Java中,...

    工厂方法模式Demo

    工厂方法模式是一种面向对象的设计模式,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建所关心的对象,而客户端代码则使用这些对象,而不必知道对象是如何被创建的。这种...

    工厂方法模式源文件

    工厂方法模式是面向对象设计模式中的行为模式,它属于创建型模式的一种,主要解决的是当一个类不知道它所必须创建的对象的类的时候,或者当一个类希望由它的子类来决定实例化哪个类的时候,如何封装这个实例化过程的...

    设计模式之工厂方法、简单工厂、抽象工厂

    工厂方法、简单工厂和抽象工厂是创建型设计模式的三种不同形式,它们都关注于对象的创建过程,但各有其特点和适用场景。 1. **工厂方法(Factory Method)**: 工厂方法模式定义了一个创建对象的接口,但让子类...

    工厂方法应用实例源码

    工厂方法(Factory Method)和抽象工厂方法(Abstract Factory Method)是两种常见的设计模式,尤其在Java编程中被广泛应用。这个"工厂方法应用实例源码"展示了如何在实际项目中使用这两种设计模式来实现一个馅饼店...

    工厂方法模式[C#]

    工厂方法模式是设计模式中的一种创建型模式,它在面向对象编程中扮演着重要的角色。在C#中,我们可以利用这种模式来抽象产品的创建过程,将具体的实例化操作延迟到子类中进行,从而实现代码的解耦和扩展性。 1. **...

    工厂方法模式应用案例

    工厂方法模式是面向对象设计模式中的行为模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,我们创建对象时不直接实例化具体的产品,而是通过一个抽象工厂类来调用具体工厂子类的方法来生成对应的具体...

    抽象工厂,工厂方法,简单工厂

    在软件设计模式中,"抽象工厂"、"工厂方法"和"简单工厂"都是创建型设计模式,它们都用于封装对象的创建过程,提供了一种间接的途径来创建对象,从而使得代码更加灵活,易于扩展。下面将详细介绍这三个工厂模式。 ##...

Global site tag (gtag.js) - Google Analytics