`

工厂方法模式实现单例

 
阅读更多

首先要创建一个单例实例,这个实例的无参构造是私有的,防止外部使用new关键字创建对象

public class Singleton {

    private Singleton() {

    }

    public void doSomething() {
        System.out.println("单例工厂");
    }
}

 

再次创建一个单例工厂,创建对象要在static代码块中,不可在方法getSingleton()中,如果在该方法中,每次调用都会产生一个新的对象,这就违背了单例的规则。

public class SingletonFactory {

    private static Singleton singleton;

    static {
        try {
            Class clazz = Class.forName(Singleton.class.getName());
            Constructor constructor = clazz.getDeclaredConstructor();
            constructor.setAccessible(true);
            singleton = (Singleton) constructor.newInstance();
        } catch (ClassNotFoundException e) {

        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static Singleton getSingleton() {

        return singleton;
    }
}

 客户端代码:

public class SingletonFactoryTest {

    public static void main(String[] args) {

        Singleton singleton = SingletonFactory.getSingleton();
        Singleton singleton2 = SingletonFactory.getSingleton();
        System.out.println(singleton);
        System.out.println(singleton2);
    }

}

 打印结果:

com.za.java.factory.Singleton@3c0f3387

com.za.java.factory.Singleton@3c0f3387

打印两次的结果相同,说明使用的是同一个对象。

分享到:
评论

相关推荐

    设计模式单例模式和工厂模式综合应用

    在Java中,通常通过私有构造函数和静态工厂方法来实现单例。单例模式常用于控制共享资源,如线程池、数据库连接或者配置对象。其优点在于节省内存,减少对系统资源的消耗,同时保证了对象间的同步。 **工厂模式**是...

    设计模式之单例模式(结合工厂模式)

    单例对象的创建可以在静态初始化块中完成,或者在getInstance方法中通过DCL模式实现。 在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析...

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...

    简单工厂,代理模式,单例模式demo

    实现单例通常有两种方法:饿汉式(静态常量)和懒汉式(双重检查锁定)。前者在类加载时就创建实例,而后者则是在第一次请求时才创建。 在压缩包中的文件"代理_单例"可能包含了这两种模式的实现代码。代理模式的...

    工厂模式与单例模式

    在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...

    VC2010工厂模式和单例模式的实现

    自己用VC2010写的工厂模式和单例模式的实现

    设计模式的工厂模式,单例模式

    实现单例模式通常涉及私有化构造函数、保持对唯一实例的静态引用以及提供一个公共的静态方法来获取这个实例。 现在让我们深入了解一下这两种模式: **工厂模式的实现**: 1. **简单工厂模式**:一个中心类负责创建...

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

    在Java中,简单工厂、工厂方法和抽象工厂是三种不同的工厂模式实现。 5. **简单工厂模式**:是最简单的工厂模式形式,它包含一个工厂类,根据传入的参数决定返回哪种类型的实例。虽然易于理解,但不易扩展,因为...

    经典工厂单例模式典范

    在Java中,通常通过私有构造函数和静态工厂方法来实现单例,确保类无法被多次实例化。同时,为了线程安全,可以使用双重检查锁定(Double-Checked Locking)或者静态内部类的方式进行优化。 结合工厂单例模式,我们...

    三种工厂设计模式和两种单例模式

    在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...

    常用设计模式特点比如工厂模式、单例模式等等

    在C++中,实现单例模式需要注意线程安全,尤其是在多线程环境下。 除了这两个模式,还有其他设计模式也值得了解: - "组件协作模式":如策略模式、观察者模式,它们帮助对象之间协同工作,实现灵活的行为调整。 - ...

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    在Java中,实现单例模式有多种方式,如懒汉式(线程不安全)、饿汉式(静态常量)、双重检查锁定(DCL)等。其中,`Singleton.java`通常表示使用DCL实现的单例,它既保证了线程安全,又避免了不必要的同步开销。 ``...

    设计模式:单例设计模式(全部实现方式)工厂设计模式,抽象工厂模式

    工厂模式的常见实现方式包括简单工厂、工厂方法、抽象工厂等。 抽象工厂模式是一种创建型设计模式,它的主要目标是提供一个接口或抽象类,用于创建一系列相关或依赖的对象。该模式的主要优点在于,它可以为客户端...

    单例模式和工厂模式代码

    在Java中,实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(静态常量)、双检锁(DCL)和枚举单例。其中,双检锁和枚举单例是线程安全的,推荐在多线程环境下使用。 ```java // 双检锁/双重校验锁(DCL...

    Java实现多种单例模式

    以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...

    设计模式源代码--工厂模式与单例

    #### 实现单例 单例的实现通常有两种方法:懒汉式和饿汉式。懒汉式是在第一次使用时才创建实例,而饿汉式则是在类加载时就创建实例。为了防止多线程环境下多个实例的产生,通常会配合`synchronized`关键字或双检锁...

    javaweb项目+设计模式(单例模式,工厂模式,动态代理,适配器)

    在Java中实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(线程安全)、双重检查锁定(DCL,线程安全)以及枚举单例。确保单例模式正确实现的关键在于防止多线程环境下的多次实例化和序列化/反序列化时的...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂 第二部分

    相比于工厂方法和抽象工厂模式,简单工厂模式更易于理解和实现,但不易于扩展,因为所有创建逻辑都集中在一个类中。 在实际项目中,结合使用这些设计模式可以优化代码结构,提高代码的复用性和灵活性。例如,一个...

    一例读懂设计模式-单例模式、简单工厂模式.zip

    本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...

Global site tag (gtag.js) - Google Analytics