浅谈JAVASE单例设计模式_java

简单的说设计模式,其实就是对问题行之有效的解决方式。其实它是一种思想。

1.单例设计模式。

      解决的问题:就是可以保证一个类在内存中的对象唯一性。(单个实例)

      使用单例设计模式需求:必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

      如何保证对象唯一性?                                                      解决步骤:

      1.不允许其他程序用new创建该对象。                                            1.私有化该类构造函数。

      2.在该类创建一个本类实例。                                                         2.通过new 在该类中创建一个本类对象。

      3.对外提供一个方法让其他程序可以获取该对象。                            3.定义一个公有的方法,将创建的对象返回。

//饿汉式(开发时常用)
class Single//类一加载,对象就已经存在了。
{
  private static Single s = new Single();

  private Single(){}

  public static Single getInstance()
  {
    return s;
  }
}

 

//懒汉式(面试时常问,在多线程并发访问时候有可能导致不能保证不了对象的唯一性,存在安全隐患!)
class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。
      //延迟加载形式。
{
  private static Single2 s = null;

  private Single2(){}

  public static Single2 getInstance()
  {
    if(s==null)
      s = new Single2();
    return s;
  }
}

//调用类
class SingleDemo
{
  public static void main(String[] args)
  {
    Single s1 = Single.getInstance();
    Single s2 = Single.getInstance();

    System.out.println(s1==s2);

//   Single ss = Single.s; //此处不采用这个是因为不可控,采用 Single.getInstance();可以传参数进行相应调用。

  }
}

饿汉式单例类在自己被加载时就将自己实例化。即便加载器是静态的,在饿汉式单例类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。

3.登记式:

代码:

package pattern.singleton;import java.util.HashMap;import java.util.Map;
 //登记式单例类.
 //类似Spring里面的方法,将类名注册,下次从里面直接获取。
public class Singleton3 {
 private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
 static{
 Singleton3 single = new Singleton3();
 map.put(single.getClass().getName(), single);
 }
 //保护的默认构造子
protected Singleton3(){}
 //静态工厂方法,返还此类惟一的实例
public static Singleton3 getInstance(String name) {
 if(name == null) {
 name = Singleton3.class.getName();
 System.out.println("name == null"+"--->name="+name);
 }
 if(map.get(name) == null) {
 try {
 map.put(name, (Singleton3) Class.forName(name).newInstance());
 } catch (InstantiationException e) {
 e.printStackTrace();
 } catch (IllegalAccessException e) {
 e.printStackTrace();
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 }
 }
 return map.get(name);
 }
 //一个示意性的商业方法
public String about() {
 return "Hello, I am RegSingleton.";
 }
 public static void main(String[] args) {
 Singleton3 single3 = Singleton3.getInstance(null);
 System.out.println(single3.about());
 }
 }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javase
单例设计模式
java单例模式、java单例模式例子、java单例模式的作用、java 单例设计模式、java单例模式应用场景,以便于您获取更多的相关知识。

时间: 2024-10-07 13:46:24

浅谈JAVASE单例设计模式_java的相关文章

浅谈Java编程中的单例设计模式_java

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像findbugs等代码检查工具还会认为使用System.out.println()是一个bug. 为什么作为Java新手神器的System.out.println(),到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比如不可控制,所有的日志都会在项目上线后照常打印,从而降低运

浅谈javaSE GUI (Action事件)_java

对自己定义的类规范化一下,事件和图形化组件分离出来 定义一个类FrameDemo 定义成员属性Frame frame 定义成员属性Botton 定义构造方法FrameDemo() 定义初始化方法init() 初始化方法中,new出来Frame(),参数:String的窗体名称 调用Frame对象的setBounds()方法,参数:x,y,width,height 调用Frame对象的setLayout()方法,参数:FlowLayout对象 获取Button对象,new出来,构造参数:Strin

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

单例设计模式

package test; /* 单例设计模式特点 1.类不能实例化 构造方法私有化 2.类中先实例化一个对象 3.提供一个返回类对象的方法 getInstance */ public class Singleton {      public static void main(String[] args) {           // TODO Auto-generated method stub\           Single si=Single.getInstance();      

【秒懂设计模式】单例设计模式

 秒懂设计模式--单例设计模式 (三)单例设计模式 1.先解释一下,什么是单例模式呢? 在Java中是这样定义的:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 显然从单例模式的定义中,我们可以发现它有三个要点: ①某个类只能有一个实例: ②它必须自行创建这个实例: ③它必须自行向整个系统提供这个实例. 2.要满足这三个要点,应该如何实现呢?下面让我们来逐条分析: ①如何保证某个类只能有一个实例? 让我先来想一下,一个类的对象是如何创建的呢?答案是:一个类的对象的产生是由类

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

JAVA之旅(六)——单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖

JAVA之旅(六)--单例设计模式,继承extends,聚集关系,子父类变量关系,super,覆盖 java也越来越深入了,大家加油吧!咱们一步步来 一.单例设计模式 什么是设计模式? JAVA当中有23种设计模式,解决某一问题最有效的方法 单例设计模式 解决一个类在内存中只存在一个对象 想要保证对象唯一该怎么做> 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 2.还为了让其他程序访问到该类对象,只好在本类中自定义一个对象 3.为了方便其他程序对自定义对象的访问,可以对外提供

IOS 单例设计模式解读

IOS 中单例设计模式的解读与用法 一.单例的作用       顾名思义,单例,即是在整个项目中,这个类的对象只能被初始化一次.它的这种特性,可以广泛应用于某些需要全局共享的资源中,比如管理类,引擎类,也可以通过单例来实现传值.UIApplication.NSUserDefaults等都是IOS中的系统单例. 二.单例的写法        单例的写法常用的有两种方式:        方式1.不考虑线程 ? 1 2 3 4 5 6 7 8 static SingleCase *manager = 

浅谈java异常处理之空指针异常_java

听老师说,在以后的学习中大部分的异常都是空指针异常.所以抽点打游戏的时间来查询一下什么是空指针异常 一:空指针异常产生的主要原因如下: (1)当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在 (2)当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在 (3)字符串变量未初始化: (4)接口类型的对象没有用具体的类初始化,比如: List lt:会报错 List lt = new ArrayList():则不会报