在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静态工厂方法是一种特殊的工厂方法,它可以返回类的实例,而不是通过构造器来获取实例。静态工厂方法通常以valueOf、getInstance、newInstance等命名,具有三个特点:具名、环保、多子。 具名:静态工厂方法...
静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与传统的构造函数不同,因为构造函数是通过new关键字调用的,而静态工厂方法可以提供更加灵活的对象创建...
静态工厂方法是类中定义的一个静态方法,用于返回一个实例。Spring框架允许我们将这种静态工厂方法作为创建对象的方式。这种方式的一个主要优点是,我们可以在不改变配置的情况下,通过更改工厂方法来返回不同类型的...
在Java中,我们可以为一个类定义多个静态工厂方法,每个方法根据其名称和参数来区别,以创建具有特定状态的对象。例如: ```java class People { String name; int age; int weight; public static People get...
在Java编程中,静态工厂是一种创建对象的方式,它与构造函数不同,不直接通过`new`关键字来实例化对象。这种设计模式常用于提供更加灵活的实例化过程,或者当类不能被实例化(例如,作为单例)时。本示例中的"静态...
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
总结来说,静态工厂方法在Java中提供了一种比构造方法更加灵活和高效的方式来创建对象实例,特别是在需要实例控制、性能优化或API设计简洁时。文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的...
在这个模式中,工厂类通常是静态的,客户端通过调用静态方法来获取对象实例。 - 在`SimpleFactory`文件中,我们可以看到一个简单的工厂类,它根据输入类型创建相应的对象。这种模式适用于对象种类较少且不常变动的...
这个工厂类通常由一个静态方法构成,根据传入的参数来决定创建哪个具体的产品实例。这种模式适用于产品种类较少,且不会频繁扩展的情况。简单工厂模式的优点在于客户端无需知道具体产品的实现细节,只需要知道工厂...
- 简单工厂模式是一种静态工厂方法模式,它包含一个静态工厂类,负责创建对象。在这个例子中,可能有一个名为`Factory`的类,其中包含一个静态方法,如`createInstance()`,这个方法根据输入参数返回相应的对象实例...
一个典型的静态工厂方法可能如下所示: ```java public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } ``` 这个例子展示了如何通过静态工厂方法`valueOf`来创建`Boolean`对象...
1. **Java实现**:在Java中,工厂模式可以通过类的静态方法或者接口实现。例如,可以定义一个`AbstractFactory`接口,然后创建具体的产品工厂类如`ConcreteFactory1`和`ConcreteFactory2`,这些工厂类实现了`...
Java设计模式之静态工厂模式是软件设计模式中的一种,属于创建型模式。它提供了一种简单的方式来创建对象,而不需要暴露创建逻辑的实现细节。 静态工厂模式的概念 静态工厂模式也称为简单工厂模式,它是一种简单的...
简单工厂模式是一种最为基础的创建型模式,它提供一个静态方法来创建对象,这个静态方法根据传入的参数来决定创建哪个类的实例。简单工厂模式的主要优点在于客户端无需知道具体产品的类名,只需要知道产品的类型即可...
标题和描述中提到的“Java工厂模式”是Java设计模式中的一个重要组成部分,属于创建型模式的一种,主要目的是解决实例化对象的问题。工厂模式的核心在于提供一个创建对象的接口,但将具体的实例化工作延迟到子类中...
在软件设计模式中,工厂模式是一种非常基础且实用的...在Java中,我们可以使用静态工厂方法或者实例工厂类来实现这一模式,以满足不同的需求。通过`FactoryTest.java`的测试,我们可以验证工厂模式的正确性和实用性。
Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展可追溯到1991年,当时由...
在Java中,通常通过私有构造器、静态工厂方法和双重检查锁定等技术实现单例,以确保线程安全和唯一性。 3. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。它可以用来在访问目标对象前添加...
简单工厂模式是一种创建型设计模式,它提供一个创建对象的静态方法,客户端可以通过这个方法来实例化所需的类,而无需关心具体类的实现细节。这种模式在Java编程中广泛应用,特别是在需要根据条件创建不同类型的对象...