单例设计模式

介绍:通过单例模式可以保证系统中,应用该模式的这个类只有一个实例。即一个类只有一个对象实例。

 

实现步骤:

1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
2. 在该类内部产生一个唯一的实例化对象
3. 定义一个静态方法返回这个唯一对象。

 

单例设计模式的类型:

1.饿汉式  饿汉单例设计模式就是使用类的时候已经将对象创建完毕,不管以后会不会使用到该实例化对象,先创建了再说。

2.懒汉式  懒汉式单例设计模式就是需要使用实例化对象的时候再创建对象

 

饿汉式代码实现:

public class Person {
// 使用饿汉式单例设计模式: 比较着急,不管要不要获取我这个类的对象,先创建了该对象再说
// 1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
private Person(){
}

// 2. 在该类内部产生一个唯一的实例化对象
private static final Person p = new Person();

// 3. 定义一个静态方法返回这个唯一对象。
public static Person getInstance(){
return p;
}

// ....
}

 

懒汉式代码实现:

public class Person {
// 懒汉式单例: 不着急,只要当你调用了getInstance静态方法获取对象的时候,就创建,其他时候不创建
// 1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
private Person(){

}

// 2. 在该类内部产生一个唯一的实例化对象
private static Person p ;// 默认值为null

// 3. 定义一个静态方法返回这个唯一对象。
public static synchronized Person getInstance(){
// 创建Person类的唯一对象
// 判断一下,如果p这个成语变量的值为null,就创建,不为null,说明该对象已经创建了,直接返回即可
if (p == null){
p = new Person();
}
return p;
}

}

 

饿汉式单例模式和懒汉式单例模式的区别?

创建实例对象的时机:

  1.饿汉式:在使用之前先创建对象

  2.懒汉式:需要使用实例化对象的时候再创建

线程安全:

  1.饿汉式:不存在线程安全问题

  2.懒汉式:多线程的时候存在线程安全问题

单例设计模式

上一篇:Darwin Streaming Server用vs2005编译运行过程


下一篇:简单工厂模式和策略模式