单例设计模式
设计模式是在大量的实践中总结后优选的代码结构、编程风格以及解决问题的思考方式。
单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能产生一个对象实例,并且该类只提供一个取得其对象的实例方法.
单态设计模式类型
1) 饿汉单例设计模式(保证在内存中只有一个对象)
1. 私有化构造函数。
2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
3. 提供一个公共静态的方法获取本类的对象。
2) 懒汉单例设计模式(只有用到对象时才创建)
1. 私有化构造函数。
2. 声明本类的引用类型变量,但是不要创建对象,
3. 提供公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类对象,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,然后再返回。
推荐使用: 饿汉单例设计模式。 因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。
在java中实现单态模式只需要执行以下三步:
1.将类的构造方法的访问权限声明为private.这样就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象.
2.在类内部生成一个静态的实例.
3.提供一个静态的方法用于外部取得该类的实例.
因为在类的外部无法得到类的对象,所以只能调用该类的某个静态方法以返回类内部创建的对象,又因为静态方法只能访问类中的静态成员变量,所以,指向类内部产生该类对象的变量也必须定义成静态的。
1)饿汉设计模式:
//饿汉单例设计模式----> 保证Single在在内存中只有一个对象。(直接创建完对象 饥饿的等待着调用方)
class Single{
//声明本类的引用类型变量,并且使用该变量指向本类对象
private static Single s = new Single();
//私有化构造函数
private Single(){}
//提供一个公共静态的方法获取本类的对象
Public static Single getInstance(){
return s;
}
}
2)懒汉设计模式
//懒汉单例设计模式(用到这个对象才new) ----> 保证Single在在内存中只有一个对象。(懒 我就不创建对象,你用到我我再创建)
class Single2{
//声明本类的引用类型变量,不创建本类的对象
private static Single2 s;
//私有化了构造函数
private Single2(){}
//
public static Single2 getInstance(){
if(s==null){
s = new Single2();
}
return s;
}
}
例如图书馆:
package com.entity;
public class Library { //图书馆只需要一个
// 定义一个私有、静态的引用变量
private static Library library;
private Library() // 构造器私有
{ }
// 提供一个公有、静态方法获得唯一实例
public static Library getLibraryInstance()
{
if (library == null) // 如果还未创建实例
{
library = new Library(); // 创建一个实例
}
return library; // 将它返回
}
}