`
men4661273
  • 浏览: 278217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java设计模式-单例模式

    博客分类:
  • java
阅读更多

         单例模式1,饿汉模式

//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
    //私有的默认构造函数
    private Singleton1() {}
    //已经自行实例化
    private static final Singleton1 single = new Singleton1();
    //静态工厂方法
    public static Singleton1 getInstance() {
        return single;
    }
}

 单例模式2,懒汉模式

//懒汉式单例类.在第一次调用的时候实例化
public class Singleton2 {
    //私有的默认构造函数
    private Singleton2() {}
    //注意,这里没有final    
    private static Singleton2 single=null;
    //静态工厂方法
    public synchronized  static Singleton2 getInstance() {
         if (single == null) {  
             single = new Singleton2();
         }  
        return single;
    }
}

 单例模式3 枚举类型

//可以有效防止通过反射重新创建实例
public class Singleton3 {

//唯一的实例  

INSTANCE;

public void doSomething(){

}

}
单例模式4 缓存池模式,IOC模式
 
import java.util.HashMap;
import java.util.Map;
//将类实例化之后放在静态的Map中缓存,需要时从中获取
public class Singleton4 {
    private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
    static{
        Singleton4 single = new Singleton4();
        map.put(single.getClass().getName(), single);
    }
    //保护的默认构造函数
    protected Singleton4(){}
    //静态工厂方法,返还此类惟一的实例
    public static Singleton4 getInstance(String name) {
        if(name == null) {
            name = Singleton4.class.getName();
         }
        if(map.get(name) == null) {
            try {
                map.put(name, (Singleton4) Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return map.get(name);
    }
}
 
单例测试,反射创建新实例
  @Test
 public void aaaaaaaaaaaaaaaaaaaaaaaaa() throws IOException, InterruptedException, InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException {
  
  //普通模式单例,
  MyTest2 t1 = MyTest2.getInstance();
  MyTest2 t2 = MyTest2.getInstance();
  System.out.println(t1 == t2);//输出true
  MyTest2 t3 = null;
  //通过反射方式访问私有构造方法,创建新实例
  Constructor<MyTest2>[] cs1 = MyTest2.class.getDeclaredConstructors();
  for (Constructor c : cs1) {
   //允许访问私有构造
   c.setAccessible(true);
   t3 = (MyTest2)c.newInstance();
  }
  System.out.println(t1 == t3);//输出false
  
  //枚举类型反射创建新实例 ,MyTest1为枚举类
  MyTest2 t4 = null;
  Constructor<MyTest1>[] cs2 = MyTest1.class.getDeclaredConstructors();
  for (Constructor c : cs2) {
   //允许访问私有构造
   c.setAccessible(true);
   //报异常 java.lang.IllegalArgumentException: Cannot reflectively create enum objects
   t4 = (MyTest2)c.newInstance();
  }
  System.out.println(t1 == t4);//无法输出
 }
 
 
分享到:
评论

相关推荐

    Java设计模式-单例模式详解

    Java设计模式-单例模式详解 单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 ...

    java设计模式----单例模式

    在Java编程语言中,设计模式是一种经过验证的解决常见软件设计问题的最佳实践。单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、...

    JAVA-设计模式-创建型模式-单例模式

    JAVA-设计模式-创建型模式-单例模式

    java设计模式-单例.pdf

    ### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...

    设计模式-单例模式

    **设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...

    ava常用设计模式-单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一实例。 单例模式有多种实现...

    常见设计模式-单例模式

    设计模式-单例模式 单例模式是一种常见的设计模式,它的主要作用是确保在内存中仅创建一次对象,并提供一个全局访问点。单例模式有两种类型:饿汉类型和懒汉类型。 饿汉类型的单例模式是在类加载时创建对象,例如...

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    单例模式是软件设计模式中的一种经典模式,其主要目的是保证一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,包括简单实现、双重检查锁定(Double-Checked Locking)、静态内部类和...

    设计模式-单例设计模式

    单例模式是一种常见的创建型设计模式,其核心思想在于确保一个类仅有一个实例存在,并且该实例由该类自行创建,随后向整个系统提供这一唯一实例。 #### 类图解析 在设计模式中,类图是一种直观展示类结构及关系的...

    1.设计模式-单例设计模式1

    在Java中,实现单例模式通常有多种方式,包括懒汉模式、饿汉模式、静态内部类以及枚举类型。 1. **懒汉模式**: 懒汉模式在第一次需要实例时才进行实例化,因此也被称为延迟加载。但是,这种模式存在线程安全问题...

    设计模式-单例模式(讲解及其实现代码)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供全局访问点。这种模式在许多场景下非常有用,比如控制共享资源、管理系统级别的对象,如数据库连接池或者线程池等。单例模式的核心在于限制类的...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    计算机后端-Java-图解java设计模式037 单例模式JK.avi

    计算机后端-Java-图解java设计模式037 单例模式JK.avi

    Java设计模式之单例模式讲解

    入名所示,该文件为最详细的Java单例模式讲解并附有讲解代码。主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免...

    计算机后端-Java-图解java设计模式036 单例(.avi

    计算机后端-Java-图解java设计模式036 单例(.avi

    计算机后端-Java-图解java设计模式038 单例模.avi

    计算机后端-Java-图解java设计模式038 单例模.avi

    计算机后端-Java-图解java设计模式035 单例(静.avi

    计算机后端-Java-图解java设计模式035 单例(静.avi

Global site tag (gtag.js) - Google Analytics