设计模式---单例模式Singleton

单利模式保证在任何时候,该类只有一个对象。避免了重复创建对象的时间及内存消耗。

方式:私有化构造器,并且暴露出获取该类的对象的方法,每次获取类对象的时候查看类对象是否存在,如果存在则返回该对象,如果不存在则创建后返回。

单例模式主要有拉两种:饱汉模式、懒汉模式

  饱汉模式:在类加载的时候便创建出对象,并且整个程序运行过程中,该对象在内存中只有一个。饱汉模式是线程安全的。

  懒汉模式:在类对象第一次需要的时候创建对象,并保留在内存中,以后需要该类的对象时直接返回已经创建好的对象。懒汉模式是非线程安全的,如果想确保线程安全可以在对象的创建代码块上加上synchronized 关键字,保证对象创建的时候线程安全,但是这样的执行效率会比较低。

示例代码:

  

/**
*饿汉模式,由于private final static SingletonTest single = new SingletonTest();
*是静态变量,类加载的时候创建,线程安全
*/
public class SingletonTest {
private final static SingletonTest single = new SingletonTest();
private SingletonTest(){
System.out.println("Constractor---------SingletonTest");
}
public static SingletonTest getInstance(){
return single;
}

public static void Holle(){
System.out.println("----------holle singleton!");
}
public static void main(String[] args) {
SingletonTest singleton1 = SingletonTest.getInstance();
SingletonTest singleton2 = SingletonTest.getInstance();
SingletonTest singleton3 = SingletonTest.getInstance();
singleton1.Holle();
singleton2.Holle();
singleton3.Holle();
}
}

执行结果:

Constractor---------SingletonTest    //三次获取对象,只创建了一次
----------holle singleton!
----------holle singleton!
----------holle singleton!

 

/**
* 懒汉模式,在对象需要的时候才创建对象
* @author Administrator
*
*/
public class SingletonTest2 {
//私有静态变量
private static SingletonTest2 singleton = null;
//私有地构造器
private SingletonTest2(){
System.out.println("Constract-------- Singelton2!");
}
//公开的对象获取方法
public static SingletonTest2 getInstance() {
if(singleton == null)
{
singleton= new SingletonTest2();
}
return singleton;
}
public static void Holle(){
System.out.println("--------Holle Singelton2!");
}
public static void main(String[] args) {
SingletonTest2 test1 = SingletonTest2.getInstance();
SingletonTest2 test2 = SingletonTest2.getInstance();
SingletonTest2 test3 = SingletonTest2.getInstance();
test1.Holle();
test2.Holle();
test3.Holle();
}
}

执行结果:

  

Constract-------- Singelton2!      //三次获取对象,只有第一次获取的时候创建了该对象。
--------Holle Singelton2!
--------Holle Singelton2!
--------Holle Singelton2!

猜你喜欢

转载自www.cnblogs.com/lgs-star/p/9031370.html