一、什么是单例模式:
单例模式确保某一个类只有一个实例,而且向这个系统提供这个实例。
二、单例模式的要点:
1、某个类只能有一个实例
2、它必须自行创建这个实例
3、必须自行向这个系统提供这个实例
举例:饿汉式单例类
package design.Singleton;
/***********************************************************************
*
* Singleton2.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Jan 26, 2010 4:34:51 PM
* @revision $Id: *
***********************************************************************/
public class Singleton2 {
private static Singleton2 singleton2 = new Singleton2();
private Singleton2(){
}
public static Singleton2 getInstance(){
return singleton2;
}
}
2:懒汉式单利类
package design.Singleton;
/***********************************************************************
*
* Singleton1.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Jan 26, 2010 4:32:04 PM
* @revision $Id: *
***********************************************************************/
public class Singleton1 {
private static Singleton1 ingleton1;
private Singleton1(){
}
public static synchronized Singleton1 getInstance(){
if(null==ingleton1){
ingleton1= new Singleton1();
}
return ingleton1;
}
}
3:同步安全单列类
package design.Singleton;
/***********************************************************************
*
* Singleton3.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Jan 26, 2010 4:36:34 PM
* @revision $Id: *
***********************************************************************/
public class Singleton3 {
private static Singleton3 singleton3;
private Singleton3() {
}
public static synchronized Singleton3 getInstance() {
if (null == singleton3) {
synchronized (Singleton3.class) {
if (null == singleton3) {
singleton3 = new Singleton3();
}
}
}
return singleton3;
}
}
下面用测试代码说明 只创建一个类
Message (辅助类)
package design.Singleton;
/***********************************************************************
*
* Message.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Jan 26, 2010 4:47:32 PM
* @revision $Id: *
***********************************************************************/
public class Message {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
测试类
package design.Singleton;
import java.util.ArrayList;
import java.util.List;
/***********************************************************************
*
* test.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Jan 26, 2010 4:39:48 PM
* @revision $Id: *
***********************************************************************/
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Singleton3> list = new ArrayList<Singleton3>();
for (int i=0;i<5;i++){
Singleton3 s1=Singleton3.getInstance();
if(!list.contains(s1)){
list.add(s1);
}
}
List<Message> list2 = new ArrayList<Message>();
for (int i=0;i<5;i++){
Message m= new Message();
if(!list2.contains(m)){
list2.add(m);
}
}
System.out.println("size"+list.size());
for (Singleton3 s:list){
System.out.println("hashcode"+s.hashCode());
}
System.out.println("size2"+list2.size());
for (Message s:list2){
System.out.println("hashcode2"+s.hashCode());
}
}
}
测试结果分析Singleton3 只创建一个类 list 个数只有一个(如果放开代码 if(!list.contains(s1)){
)显示hashcode 值相同 而Message 创建5个对象 list个数为5个 hashcode值分别不相同。
所以 单列类只创建一个实例
分享到:
相关推荐
设计模式--单例模式java例子
java设计模式 设计模式(列如:单列,工厂,桥梁,===)
设计模式 java 单例模式
设计模式全部内容(抽象模式·工厂模式·代理模式·单列模式·)
实现一个简单的便签软件主界面实现双视图预览——单列显示、瀑布流显示主界面可以对文本进行批量删除、加锁、按文本内容搜索等功能主界面可以将本地数据库同步到云端服务器的数据库上,也可以拉取云端服务器的数据库...
Qt单例设计模式(1-8)
设计模式之单例模式,单列模式的几种实现形式,以及其优缺点,还有就是示例,对初步了解单列模式的有所帮助
Java设计模式的类别有哪些? 基于问题分析,可以将设计模式分为以下几类: 创造模式 工厂方法/模板模式 抽象工厂模式 建造者模式 原型模式 单列模式 结构模式 适配器模式 桥模式 筛选模式 合成模式 装饰者模式 正面...
废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧。 php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式。之所以我在这里...
单例模式23中设计模式之一
实现一个简单的便签软件主界面实现双视图预览——单列显示、瀑布流显示主界面可以对文本进行批量删除、加锁、按文本内容搜索等功能主界面可以将本地数据库同步到云端服务器的数据库上,也可以拉取云端服务器的数据库...
一个可以让你对Java泛型更加深入了解的下例子。
多线程简单工厂设计模式,工厂方法模式,单列模式,多线程死锁解决
工厂模式,代理模式,建造者模式,装饰模式,单列模式等等
Java设计模式-单例模式详解,包含三种模式式:饿汉,懒汉,登记式,以及线程多同步的处理
网页模板——纯javascript仿做土豆网豆单列表载入图片特效
iOS 设计模式,文字通过代码与例子,清晰的讲解了设计模式:工厂模式、单列、接口适配、桥接、中介者、观察者、抽象集合、迭代器、行为扩展、算法封装、责任链、装饰、访问者、模板方法、命令、性能与对象访问、代理...
单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源 单例模式无论是在实际开发中还是在软件应用中比较常见,...