一、单例模式
概念定义:设计模式中的最早的定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。
java中单例模式的定义:一个类有且只有一个实例并且,并且自行实例化向整个系统提供。
写一个单例模式引用的举例:
public class Singleton {
private String name;
public String getName()
{
return name;
}
public void setName(String nAme)
{
this.name=nAme;
}
//该类只能有一个实例
//设置构造方法私有,避免了类在外部被实例化
private Singleton()
{
}
//申明实例对象
private static Singleton instance;
//通过getInstance()实例化Singleton
public static Singleton getInstance()
{
if(instance==null)
{
instance=new Singleton();
}
return instance;
}
public void getInfo()
{
System.out.println("模式:"+name);
}
}
测试类:
public class SingletonTest {
public static void main(String[] args) {
TestDanli sl=TestDanli.getInstance();
System.out.println(sl.getName());
}
}
单例模式的三个特征:
1、只能有一个实例。
2、必须自己创建唯一的实例。
3、将创建的实例提供给所有对象。
三种单例的实现:
(1)饿汉式单例:
在类初始化的时候就已经自己实例化
/**
*
*=======================================================
* @author xing
* @【饿汉式单例模式】
*=======================================================
*/
public class SingletonD1 {
//私有的构造函数
private SingletonD1(){}
//自己唯一的实例,初始化,并且在初始化的时候实例化
//private static final SingletonD1 sl=new SingletonD1();
//static表示静态方式,也就是说只能被调用执行一次,那么这里定义可以不用final
private static SingletonD1 sl=new SingletonD1();
//把自己唯一的实例交给所有的对象让他们可以调用
public static SingletonD1 getInstance()
{
return sl;
}
}
(2)懒汉式单例:
在类第一次调用实例的时候初始化
package com.xing.singleton;
/**
*
*=======================================================
* @author xing
* @【懒汉式单例类】
*=======================================================
*/
public class SingletonD2 {
//私有构造函数
private SingletonD2(){}
//初始化单例类唯一的实例
private static SingletonD2 sl=null;
//让所有的对象可以调用自己的实例,但是只能调用一次
public static SingletonD2 getInstance()
{
if(sl==null)
{
//将唯一的实例实例化
sl=new SingletonD2();
return sl;
}
return sl;
}
}