`
jilong-liang
  • 浏览: 480987 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

C# 与JSE的单例设计模式的区别

阅读更多
 
 
//1.饿汉式单例类(类加载时就初始化)

public class Singleton {
    //私有的类成员常量
    private static final Singleton singleton=new Singleton();
    //私有的默认构造方法,此类不能被继承
    private Singleton(){}
    //静态工厂方法
    public static Singleton getInstance(){
      return singleton;
  }
}

// 2.懒汉式单例类(第一次调用才初始化,延迟) 

 public class Singleton {
private  static Singleton singleton=null;
//私有的默认构造方法,此类不能被继承
private Singleton(){}
//同步,静态工厂方法,返回此类的唯一实例
public synchronized static Singleton getInstance(){
    if(singleton==null){
       singleton=new Singleton();
 }
         return singleton;
    }
}

3.对2的懒汉式的另外一种改进 

public class Singleton {
private volatile static Singleton singleton = null;

// 私有的默认构造方法,此类不能被继承
private Singleton() {
}
// 静态工厂方法,返回此类的唯一实例
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}


 //4.登记式单例类 
   // 登记式单例类是为了克服饿汉式单例类和懒汉式单例类不可继承的缺点而设计的.
package com.jse.singleton;

import java.util.HashMap;

public class RegSingleton {
private static HashMap registry=new HashMap();
/**静态代码块
        *静态代码块优先于主方法执行,而在类中定义的静态代码会优先于构造块执行,而且
        *不管产生多少对象,静态代码块只执行一
        */
static{
RegSingleton singleton=new RegSingleton();
registry.put(singleton.getClass().getName(), singleton);
}

protected RegSingleton(){}

public static RegSingleton getInstance(String name){
if(name==null){
name="com.jse.singleton.RegSingleton";
}
if(registry.get(name)==null){
try {
registry.put(name, Class.forName(name).newInstance());
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return (RegSingleton) registry.get(name);
}
}

  

//第一种:最简单,但没有考虑线程安全,在多线程时可能会出问题
public class Singleton
{
    private static Singleton _instance = null;
    private Singleton(){}
    public static Singleton CreateInstance()
    {
        if(_instance == null)
        {
            _instance = new Singleton();
        }
        return _instance;
    }
}
//第二种:考虑了线程安全,锁定当对象
public class Singleton
{
    private volatile static Singleton _instance = null;
    private static readonly object lockHelper = new object();
    private Singleton(){}
    public static Singleton CreateInstance()
    {
        if(_instance == null)
        {
            lock(lockHelper)
            {
                if(_instance == null)
                     _instance = new Singleton();
            }
        }
        return _instance;
    }
}

//第三种:可能是C#这样的高级语言特有的,实在懒得出奇
public class Singleton
{
    private Singleton(){}
    public static readonly Singleton instance = new Singleton();
}  

 

0
1
分享到:
评论

相关推荐

    JSE基础与设计模式

    /** * 作者: jilongliang * 当前类名:FilterChain.java * 项目名称:JavaStudy * 创建时间:2011-12-28 */ ... import java.util.ArrayList;...import java.util.List;...public class FilterChain implements Filter { ...

    JSE基础与设计模式实例

    /** * 作者: jilongliang * 当前类名:FilterChain.java * 项目名称:JavaStudy * 创建时间:2011-12-28 */ ... import java.util.ArrayList;...import java.util.List;...public class FilterChain implements Filter { ...

    jse.zip_JSE能写javaweb

    此外,它可能还包含了一些常用的MVC(Model-View-Controller)设计模式实现,使得业务逻辑、数据处理和用户界面的分离更加容易。 **核心特性** 1. **模块化设计**:JSE框架可能会将常见的Web开发功能划分为独立的...

    Python库 | jse-0.1.4.tar.gz

    "jse"库的具体功能没有明确描述,但从名字推测,可能是与JavaScript引擎交互相关的库,或者是处理JavaScript相关的任务。Python中有很多这样的库,如`slimit`用于解析和操作JavaScript语法树,`pyscript`用于在...

    c# 转java工具

    1. **C#与Java的差异** - **语法差异**:虽然C#和Java在很多方面都有相似之处,但它们的语法并不完全相同。例如,C#支持属性(properties),而Java使用getter和setter方法;C#有async/await异步编程模型,Java则...

    jse5.0 api 中文文档 chm3

    jse5.0 api 中文文档 chm 包含三个压缩文件

    restlet-jse

    "工具"标签可能意味着博主分享了与Restlet-JSE相关的辅助工具或者集成其他Java库的方法,比如日志框架、序列化库或者测试工具。这些工具可以帮助开发者更有效地调试、测试和监控他们的REST服务。 在压缩包文件...

    jse5.0 api 中文文档 chm2

    jse5.0 api 中文文档 chm2 包含三个压缩包

    JAVA 基础JSE.pdf

    #### 一、Java简介与发展历程 **Java** 是一门高级编程语言,以其面向对象、跨平台兼容性、安全性及稳定性著称。它不仅适用于开发大规模应用程序,也是互联网应用开发的理想选择。Java的核心优势在于“一次编写,...

    JAVA基础课件(JSE)

    1. **Java简介**:讲解Java的历史背景、设计哲学、平台架构以及与其它编程语言的对比,可能还会介绍Java的“一次编写,到处运行”特性。 2. **基本语法**(java2007_ch02.ppt):涵盖变量、数据类型、运算符、控制...

    restlet-jse-2.2.1.zip

    Restlet是一款强大的开源框架,专为构建RESTful(Representational State Transfer)Web服务而设计。REST是一种轻量级的架构风格,广泛应用于Web应用程序开发,强调简洁、无状态和可缓存的特性,以提高效率和可扩展...

    JDK10-JSE ,Installation Guide-57.pdf

    JDK10-JSE 安装指南 Java Platform, Standard Edition 安装指南 Release 10E91100-01 是 Oracle 公司发布的官方安装指南,旨在帮助用户正确安装和配置 JDK10-JSE。该指南涵盖了安装前的准备、安装步骤、安装后配置...

    jdk,jse2ch

    JAVA的安装文件,很好用。 letgofree

    JDK9-JSE-Deployment Guide-164.pdf

    JDK 9 JSE 部署指南概述 JDK 9 JSE 部署指南是 Oracle 公司发布的一份关于 Java 平台标准版的部署指南,该指南主要面向开发者和系统管理员,旨在帮助他们更好地理解和使用 JDK 9 JSE。 1. Java 平台标准版概述 ...

    JDK9-JSE-Java Language Updates-3.pdf

    JDK9-JSE-Java Language Updates-3.pdf Java 平台标准版(Java SE)9 中的 Java 语言更新主要是引入了 Java 平台模块系统。Java 平台模块系统引入了一种新的 Java 编程组件 - 模块,模块是一个有名称、自描述的...

    jse5.0 api 中文文档 chm

    jse5.0 api 中文文档 chm

    jee5jse5帮助中文版第一

    jee5jse5帮助中文版第一jee5jse5帮助中文版第一jee5jse5帮助中文版第一

Global site tag (gtag.js) - Google Analytics