Java单例模式 多种实现方式

一:通过静态私有成员实现单例模式

(1):私有化构造函数

(2):new静态实例属性对象,加锁。

单例类:

package SinglePag;
/*
 * 构造函数私有化,结合锁+静态的概念 实现单例模式
 */
public class SingleDemo {
    //防止类的实例化
    private SingleDemo(){

    }
    //静态 实例 属性
    private static SingleDemo singleD;
    //获取对象实例 (单例的方式 ),锁住当前类(加锁)

    public synchronized static SingleDemo getInstance(){
        if(singleD == null){
            singleD = new SingleDemo();
        }
        return singleD;
    }
}

实现:

package SinglePag;

public class SingleWinform {
    public static void main(String[] args) {
        SingleDemo singleDemo = SingleDemo.getInstance();
        System.out.println(singleDemo.hashCode());
        SingleDemo singleDemo2 = SingleDemo.getInstance();
        System.out.println(singleDemo2.hashCode());
    }
}

二:静态内部类实现单例模式

(1):私有化构造函数

(2):私有静态内部类,创建静态实例成员对象

(3):静态实例获取方法

单例类:

package SinglePag;

public class SingleInnerStatic {
    //静态内置类
    private static class InnerStatic{
        //静态私有 实例属性
        private static SingleInnerStatic singleInstance;
        static{
            singleInstance = new SingleInnerStatic();
        }
    }

    //私有化构造函数,防止实例化
    private SingleInnerStatic(){

    }

    public static SingleInnerStatic getInstance(){
        return InnerStatic.singleInstance;
    }
}

实现:

package SinglePag;

public class SingleStaticWinform {
   public static void main(String[] args) {
       SingleInnerStatic singleInnerStatic =SingleInnerStatic.getInstance();
       System.out.println(singleInnerStatic.hashCode());

       SingleInnerStatic singleInnerStatic2 = SingleInnerStatic.getInstance();
       System.out.println(singleInnerStatic2.hashCode());
   }
}
时间: 2024-10-06 20:10:11

Java单例模式 多种实现方式的相关文章

java单例模式的实现方式以及差异

恶汉单例模式:/** 恶汉单例模式,用空间换时间的思想进行对象的初始化,在多线程的情况下,故不存在线程安全问题. @author Administrator */public class WickedManSingleTon { private static WickedManSingleTon instance=new WickedManSingleTon(); private WickedManSingleTon() { } public static WickedManSingleTon

单例模式,多种实现方式JAVA

转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } retu

java单例模式深度解析

应用场景 由于单例模式只生成一个实例, 减少了系统性能开销(如: 当一个对象的产生需要比较多的资源时, 如读取配置, 产生其他依赖对象, 则可以通过在应用启动时直接产生一个单例对象, 然后永久驻留内存的方式来解决) Windows中的任务管理器; 文件系统, 一个操作系统只能有一个文件系统; 数据库连接池的设计与实现; Spring中, 一个Component就只有一个实例Java-Web中, 一个Servlet类只有一个实例; 实现要点 声明为private来隐藏构造器 private sta

Java单例模式的七种写法

Java单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 优缺点:这种写法lazy loading很明显,

Java 单例模式探讨

以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. 总结一下我所知道的单例模式实现方式: 1.预先加载法 Java代码 class S1 { private S1() { System.out.println("ok1"); } private static S1 instance = new S1(); public static S1

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需求进行完善. 该博客将以四种思路来完成下拉刷新和上拉加载 自定义View实现上拉加载和下拉刷新 使用PullToRefresh 实现上拉加载和下拉刷新 使用Ultra-Pull-To-Refresh实现上拉加载和下拉刷新 使用SwipeToRefreshLayout实现上拉加载和下拉刷新 如果你对L

C#高性能TCP服务的多种实现方式

轉載:http://www.cnblogs.com/gaochundong/p/csharp_tcp_service_models.html 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式,包括但不限于如下内容: APM 方式,即 Asynchronous Programming Model TAP 方式,即 Task-based Asynchronous Pattern SAEA 方式,即 SocketAsyncEventArgs RIO 方式,即 Registere

设计模式—单例模式2·实现方式

前言 前面介绍了单例模式是什么东东,并且在最后让Student类实现了单例模式.但是,单例模式实现的方式不仅仅只有单例模式1中演示的那一种,其实方式有很多.这里介绍常用的几种单例模式的实现方式: 1.饿汉式 2.懒汉式 3.懒汉式的进阶方式--双重验证 上面三个名词听不懂不要紧,先有个印象就行,下面听我慢慢扯-- 一.饿汉式 在单例模式1中介绍的那种实现方式就被称作为饿汉式,当Student类被加载到内存中的时候,我们创建的这个单例(Student类的对象)就已经被创建完成了.下面是这种实现方式

C# 高性能 TCP 服务的多种实现方式

哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式,包括但不限于如下内容: APM 方式,即 Asynchronous Programming Model TAP 方式,即 Task-based Asynchronous Pattern SAEA 方式,即 SocketAsyncEventAr