`
xo_tobacoo
  • 浏览: 390828 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java静态工厂一问

    博客分类:
  • java
阅读更多

在Effective+Java+Second+Edition2中鼓励使用静态工厂代替构造方法,原因是多方面的,第二个原因就是如果需要你可以不创建新对象。而java单例模式使用的是静态工厂:

 

  public class GlobalConfig {
    private static GlobalConfig instance = null;
    private Vector properties = null;
    private GlobalConfig() {
      //Load configuration information from DB or file
      //Set values for properties
    }
    public static GlobalConfig getInstance() {
      if (instance == null) {
        instance = new GlobalConfig();
      }
      return instance;
    }
    public Vector getProperties() {
      return properties;
    }
  }

 上面是一般写法,但是这种处理方式在单线程的模式下可以很好的运行;但是在多线程模式下,可能产生问题。如果第一个线程发现成员变量为null,准备创建对象;这是第二个线程 同时也发现成员变量为null,也会创建新对象。这就会造成在一个JVM中有多个单例类型的实例。如果这个单例类型的成员变量在运行过程中变化,会造成多 个单例类型实例的不一致,产生一些很奇怪的现象。例如,某服务进程通过检查单例对象的某个属性来停止多个线程服务,如果存在多个单例对象的实例,就会造成 部分线程服务停止,部分线程服务不能停止的情况。

解决:

public class GlobalConfig {
    private static GlobalConfig instance = null;
    private Vector properties = null;
    private GlobalConfig() {
      //Load configuration information from DB or file
      //Set values for properties
    }
    private static synchronized void syncInit() {
      if (instance == null) {
        instance = new GlobalConfig();
      }
    }
    public static GlobalConfig getInstance() {
      if (instance == null) {
        syncInit();
      }
      return instance;
    }
    public Vector getProperties() {
      return properties;
    }
  }
 

 

 

分享到:
评论

相关推荐

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

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

    JavaEE spring静态工厂创建实例

    静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与传统的构造函数不同,因为构造函数是通过new关键字调用的,而静态工厂方法可以提供更加灵活的对象创建...

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

    静态工厂方法是类中定义的一个静态方法,用于返回一个实例。Spring框架允许我们将这种静态工厂方法作为创建对象的方式。这种方式的一个主要优点是,我们可以在不改变配置的情况下,通过更改工厂方法来返回不同类型的...

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

    在Java中,我们可以为一个类定义多个静态工厂方法,每个方法根据其名称和参数来区别,以创建具有特定状态的对象。例如: ```java class People { String name; int age; int weight; public static People get...

    静态工厂demo

    在Java编程中,静态工厂是一种创建对象的方式,它与构造函数不同,不直接通过`new`关键字来实例化对象。这种设计模式常用于提供更加灵活的实例化过程,或者当类不能被实例化(例如,作为单例)时。本示例中的"静态...

    java 简单工厂模式 源代码

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...

    effective-java.pdf

    总结来说,静态工厂方法在Java中提供了一种比构造方法更加灵活和高效的方式来创建对象实例,特别是在需要实例控制、性能优化或API设计简洁时。文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    在这个模式中,工厂类通常是静态的,客户端通过调用静态方法来获取对象实例。 - 在`SimpleFactory`文件中,我们可以看到一个简单的工厂类,它根据输入类型创建相应的对象。这种模式适用于对象种类较少且不常变动的...

    Java中工厂模式案例

    这个工厂类通常由一个静态方法构成,根据传入的参数来决定创建哪个具体的产品实例。这种模式适用于产品种类较少,且不会频繁扩展的情况。简单工厂模式的优点在于客户端无需知道具体产品的实现细节,只需要知道工厂...

    java三种工厂模式文档+三个实例.rar

    - 简单工厂模式是一种静态工厂方法模式,它包含一个静态工厂类,负责创建对象。在这个例子中,可能有一个名为`Factory`的类,其中包含一个静态方法,如`createInstance()`,这个方法根据输入参数返回相应的对象实例...

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

    一个典型的静态工厂方法可能如下所示: ```java public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } ``` 这个例子展示了如何通过静态工厂方法`valueOf`来创建`Boolean`对象...

    java c++ 工厂模式源代码

    1. **Java实现**:在Java中,工厂模式可以通过类的静态方法或者接口实现。例如,可以定义一个`AbstractFactory`接口,然后创建具体的产品工厂类如`ConcreteFactory1`和`ConcreteFactory2`,这些工厂类实现了`...

    Java设计模式之静态工厂模式详解

    Java设计模式之静态工厂模式是软件设计模式中的一种,属于创建型模式。它提供了一种简单的方式来创建对象,而不需要暴露创建逻辑的实现细节。 静态工厂模式的概念 静态工厂模式也称为简单工厂模式,它是一种简单的...

    JAVA简单工厂创立性模式介绍

    简单工厂模式是一种最为基础的创建型模式,它提供一个静态方法来创建对象,这个静态方法根据传入的参数来决定创建哪个类的实例。简单工厂模式的主要优点在于客户端无需知道具体产品的类名,只需要知道产品的类型即可...

    java-工厂模式(pdf)

    标题和描述中提到的“Java工厂模式”是Java设计模式中的一个重要组成部分,属于创建型模式的一种,主要目的是解决实例化对象的问题。工厂模式的核心在于提供一个创建对象的接口,但将具体的实例化工作延迟到子类中...

    一个简单的工厂模式(java)

    在软件设计模式中,工厂模式是一种非常基础且实用的...在Java中,我们可以使用静态工厂方法或者实例工厂类来实现这一模式,以满足不同的需求。通过`FactoryTest.java`的测试,我们可以验证工厂模式的正确性和实用性。

    Effective Java读书笔记.pdf

    Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展可追溯到1991年,当时由...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    在Java中,通常通过私有构造器、静态工厂方法和双重检查锁定等技术实现单例,以确保线程安全和唯一性。 3. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。它可以用来在访问目标对象前添加...

    Java 简单工厂模式例子

    简单工厂模式是一种创建型设计模式,它提供一个创建对象的静态方法,客户端可以通过这个方法来实例化所需的类,而无需关心具体类的实现细节。这种模式在Java编程中广泛应用,特别是在需要根据条件创建不同类型的对象...

Global site tag (gtag.js) - Google Analytics