`
chenguanwei2008
  • 浏览: 121119 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

静态工厂方法

阅读更多

静态工厂方法
        创建类的实例的最常见的方式是用new语句调用类的构造方法。在这种情况下,程序可以创建类的任意多个实例,每执行一条new语句,都会导致Java虚拟机的堆区中产生一个新的对象。假如类需要进一步封装创建自身实例的细节,并且控制自身实例的数目,那么可以提供静态工厂方法。

        例如Class实例是Java虚拟机在加载一个类时自动创建的,程序无法用new语句创建java.lang.Class类的实例,因为Class类没有提供public类型的构造方法。为了使程序能获得代表某个类的Class实例,在Class类中提供了静态工厂方法forName(String name),它的使用方式如下:

        Class c=Class.forName("Sample"); //返回代表Sample类的实例

        静态工厂方法与用new语句调用的构造方法相比,有以下区别。

        (1)构造方法的名字必须与类名相同。这一特性的优点是符合Java语言的规范,缺点是类的所有重载的构造方法的名字都相同,不能从名字上区分每个重载方法,容易引起混淆。静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性,在方法名中能体现与实例有关的信息。例如Gender类有两个静态工厂方法:getFemale()和getMale()。

Gender.java

  1. public class Gender{
  2.    private String description;
  3.    private static final Gender female=new Gender("女");
  4.    private static final Gender male=new Gender("男");
  5.    private Gender(String description){this.description=description;}
  6.    public static Gender getFemale(){
  7.       return female;
  8.    }
  9.    public static Gender getMale(){
  10.       return male;
  11.    }
  12.    public String getDescription(){return description;}
  13.   }

   这一特性的缺点是与其他的静态方法没有明显的区别,使用户难以识别类中到底哪些静态方法专门负责返回类的实例。为了减少这一缺点带来的负面影响,可以在为静态工厂方法命名时尽量遵守约定俗成的规范,当然这不是必需的。目前比较流行的规范是把静态工厂方法命名为valueOf或者getInstance。

   valueOf:该方法返回的实例与它的参数具有同样的值,例如:

   Integer a=Integer.valueOf(100); //返回取值为100的Integer对象

   从上面代码可以看出,valueOf()方法能执行类型转换操作,在本例中,把int类型的基本数据转换为Integer对象。

   getInstance:返回的实例与参数匹配,例如:

   //返回符合中国标准的日历

   Calendar cal=Calendar.getInstance(Locale.CHINA);

   (2)每次执行new语句时,都会创建一个新的对象。而静态工厂方法每次被调用的时候,是否会创建一个新的对象完全取决于方法的实现。

   (3)new语句只能创建当前类的实例,而静态工厂方法可以返回当前类的子类的实例,这一特性可以在创建松耦合的系统接口时发挥作用。

    静态工厂方法最主要的特点是:每次被调用的时候,不一定要创建一个新的对象。利用这一特点,静态工厂方法可用来创建以下类的实例。

        单例类:只有惟一的实例的类。

        枚举类:实例的数量有限的类。

        具有实例缓存的类:能把已经创建的实例暂且存放在缓存中的类。

        具有实例缓存的不可变类:不可变类的实例一旦创建,其属性值就不会被改变。

 

 

分享到:
评论

相关推荐

    Java静态工厂方法的实例详解

    Java静态工厂方法的实例详解 Java静态工厂方法是一种特殊的工厂方法,它可以返回类的实例,而不是通过构造器来获取实例。静态工厂方法通常以valueOf、getInstance、newInstance等命名,具有三个特点:具名、环保、...

    java静态工厂方法详细解析——使用静态工厂方法代替构造器

    【静态工厂方法详解与应用】 一、什么是静态工厂方法? 静态工厂方法是一种在类中定义的静态公共方法,用于返回类的实例,而不是通过`new`关键字直接调用构造器来创建对象。这种方式使得实例化过程更加灵活,可以...

    Spring实战之使用静态工厂方法创建Bean操作示例

    在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...

    JavaEE spring静态工厂创建实例

    本篇将详细介绍如何在Spring中使用静态工厂方法来创建实例。 首先,让我们理解什么是静态工厂方法。静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与...

    Spring的实例工厂方法和静态工厂方法实例代码

    Spring的实例工厂方法和静态工厂方法实例代码详解 Spring 框架中提供了两种方式来实例化 bean,分别是静态工厂方法和实例工厂方法。下面我们将详细介绍这两种方法的实现和使用。 一、静态工厂方法 静态工厂方法是...

    C#的静态工厂方法与构造函数相比有哪些优缺点

    "C#静态工厂方法与构造函数的比较" C#静态工厂方法与构造函数是两种不同的对象初始化方式,各有其优缺点。本文将深入探讨静态工厂方法与构造函数的优缺点,并提供实例代码来帮助读者更好地理解和学习。 静态工厂...

    Spring依赖注入使用静态工厂设注入demo

    本篇将详细讲解如何使用静态工厂方法进行依赖注入,结合提供的"SpringIOCTest3"项目进行说明。 首先,理解依赖注入的基本概念。依赖注入是指在运行时,由容器(如Spring IoC容器)负责创建对象并管理这些对象之间的...

    静态工厂demo

    1. **使用静态工厂方法的Demo**:在这个例子中,可能有一个名为`MyClass`的类,它定义了一个静态工厂方法如`public static MyClass createInstance() {...}`。调用这个方法,如`MyClass instance = MyClass....

    yuchuangu85#Develop-Source#01. 考虑使用静态工厂方法替代构造方法1

    声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK

    jonykchen#effective-java-3rd-chinese#01. 考虑使用静态工厂方法替代构造方法1

    声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK

    SSH笔记-静态/实例工厂方法配置bean

    在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...

    09-IoC配置-静态工厂与实例工厂创建bean

    Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...

    生成静态的方法

    静态工厂方法是类中静态方法,返回类的实例。与传统的构造函数不同,它们可以返回已存在的对象,从而实现单例模式或其他对象复用策略。此外,它们还可以提供更有意义的名称,以及在不暴露构造函数的情况下控制类的...

    实例化Spring bean的两种工厂方法

    本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...

    Artiste:花式Path对象的静态工厂方法

    它包含三种静态工厂方法,包括: 一种创建规则凸多边形的方法。 一种创建规则星形多边形的方法。 一种创建圆的方法。 API public static Path regularConvexPolygon(int left, int top, int right, int bottom,...

    java用静态工厂代替构造函数使用方法和优缺点

    在Java编程中,静态工厂方法和构造函数都是用来创建对象的常见方式,但它们在特定场景下有着各自的特点和适用性。本篇文章将深入探讨静态工厂方法代替构造函数的使用方法以及它们的优缺点。 首先,我们来看一下静态...

    effective-java.pdf

    从提供的部分节选内容来看,文档专注于讨论在Java中使用静态工厂方法的好处及其与构造方法的区别,以下是对这些内容的详细展开。 1. 静态工厂方法与构造方法的区别 在Java中,获取类的实例通常是通过构造方法来实现...

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

    简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。这个工厂类根据传入的参数或者条件来决定创建哪种类型的实例。在简单工厂模式中,通常有一个中心工厂类,它负责知道如何创建各种产品。这种模式...

Global site tag (gtag.js) - Google Analytics