单例,相当于一个全局变量,在整个应用程序中保证只有一个类的实例存在。

  

线程池、数据库连接池、缓存、日志等对象常被设计成单例

实例:

1.懒汉式单例

/**
* 懒汉式单例Singelton:是一种创建性模式,在运行期调用对外开发的方法getInstance时创建单例对象
* 确保每次只创建一个实例,并提供一个全局访问点
*
* 缺陷:不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例(不推荐使用)
* @author 魅力_小生
*/
public class SingeltonTest01 { /**
* 私有的静态属性(自身)
*/
private static SingeltonTest01 instance; /**
* 私有构造,防止外部实例化
*
* 但是:通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效
*/
private SingeltonTest01(){ } /**
* 单例获取方法
* 外部只能通过该方法获取类的实例
* @return instance实例对象
*/
public static SingeltonTest01 getInstance(){
if(instance == null){
instance = new SingeltonTest01();
}
return instance;
}
}

2.饿汉式单例

/**
* 饿汉式单例
*
* 饿汉式单例类.在编译期类初始化时,已经自行实例化,从始至终只有一个对象
* 线程安全,推荐使用
* @author 魅力_小生
*/
public class SingeltonTest02 { /**
* 创建私有静态的实例
*/
private static SingeltonTest02 instance = new SingeltonTest02(); /**
* 私有构造,防止外部实例化
*/
private SingeltonTest02(){ } /**
* 静态工厂方法,返回实例
* @return
*/
public static SingeltonTest02 getInstance(){
return instance;
}
}

Singelton单例模式的更多相关文章

  1. java常用的设计模式

    设计模式:一个程序员对设计模式的理解:"不懂"为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所 ...

  2. java常用设计模式

    一个程序员对设计模式的理解: "不懂"为什么要把很简单的东西搞得那么复杂. 后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所在,我 ...

  3. java 的常用设计模式--大话设计模式

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  4. 设计模式——java

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  5. JAVA常用设计模式整理

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  6. 转载 Java设计模式

      java常用设计模式 1.strategy(策略模式)2.static Factory Method(静态工厂)3.singelton(单例模式)4.观察者模式(Observer)5.迭代器模式( ...

  7. Java温故而知新(5)设计模式详解(23种)

    一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...

  8. java 常用设计模式(转载)

    http://www.cnblogs.com/hnrainll/archive/2011/12/29/2305582.html 设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得 ...

  9. Java常用设计模式《转》

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

随机推荐

  1. selenium 右键另存为操作

    from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsbrowse ...

  2. vsftpd基本配置(原)

    前提:iptables关闭或放行,selinux关闭或放行. 目标:创建虚拟ftpuser到指定的www.ftpuser.com目录,且只能在本目录下. 创建帐号 useradd -d /var/ww ...

  3. seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码

    seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...

  4. JavaScript:九种弹出对话框

    [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE="javascript"> <!- ...

  5. js 如何生成唯一且不可预测的 ID

    通常数据库可以生成唯一的 ID,最多的就是数字序列,也有像 MongoDB 这样产生组合序列的,不过这种形式的 ID 由于是序列,是可以预测的.如果想得到不可预测且唯一的 ID,方法还是有的. 下面主 ...

  6. Linux CentOS 6.5 yum安装MongoDB的操作

    安装MongoDB的方法有很多种,可以源代码安装,在CentOS也可以用yum源安装的方法.由于MongoDB更新得比较快,我比较喜欢用yum源安装的方法.64位CentOS下的安装步骤如下: 1.准 ...

  7. MySQL数据库的常用操作

    /*创建表*/ CREATE TABLE tb_test ( id ) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', name ) NOT NULL ...

  8. js里的匿名函数 数组排序

    // 匿名函数:其实就是函数的简写形式 var method =function(){ alert("123"); } method(); // 匿名函数可以用于事件的处理 fun ...

  9. MySQL连接字符串总结

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接 Driver={MySQL};Server=localhost;Option=16834 ...

  10. ThreadLocal的使用及介绍

    ThreadLocal总结 1.ThreadLocal使用场合主要解决多线程中数据数据因并发产生不一致问题.ThreadLocal为每个线程的中并发访问的数据提供一个副本,通过访问副本来运行业务,这样 ...