单例设计模式-饿汉式-懒汉式
2015-01-22 16:12
232 查看
设计模式:
解决某一类问题最行之有效的方法。
java中目前共有23种设计模式
单例设计模式:
解决一个类在内存中只存在一个对象
单例模式设计思想:
1. 禁止其他外部类或对象创建该类的实例。
2. 为了能生成该类的对象,在本类中自己创建一个对象。
3. 为让其他程序可以访问该类的对象,提供一个外部可以访问的get方法。
单例设计模式实现步骤:
1. 将构造函数私有化。
2. 在类中创建一个自己的对象。(因为调用该对象的get方法为static的,static方法只能访问static变量,故此对象的引用应该声明为static)
3. 提供一个该对象的静态get方法。
饿汉式&懒汉式区别
推荐使用饿汉式,因为懒汉式存在多线程的安全问题。
如果非要使用懒汉式,则在其static getInstance方法中,加锁,其锁为本类的字节码文件。
饿汉式:
懒汉式:
创建步骤:
1. 私有化构造方法
2. 在本类中创建引用,赋予空对象。(private static)
3. 为使外部使用该对象,提供一个静态getInstance()方法。在方法中判断对象是否为null,当对象为空时,创建该对象,赋给上面声明的引用。
解决某一类问题最行之有效的方法。
java中目前共有23种设计模式
单例设计模式:
解决一个类在内存中只存在一个对象
单例模式设计思想:
1. 禁止其他外部类或对象创建该类的实例。
2. 为了能生成该类的对象,在本类中自己创建一个对象。
3. 为让其他程序可以访问该类的对象,提供一个外部可以访问的get方法。
单例设计模式实现步骤:
1. 将构造函数私有化。
2. 在类中创建一个自己的对象。(因为调用该对象的get方法为static的,static方法只能访问static变量,故此对象的引用应该声明为static)
3. 提供一个该对象的静态get方法。
饿汉式&懒汉式区别
推荐使用饿汉式,因为懒汉式存在多线程的安全问题。
如果非要使用懒汉式,则在其static getInstance方法中,加锁,其锁为本类的字节码文件。
饿汉式:
package com.lxh.designmode; public class SingleDemo { public static void main(String[] args) { Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); s1.setNum(23); System.out.println(s2.getNum()); } } class Single { // 1. 将构造函数私有化 private Single() {}; // 2. 在本类中创建该实例,并设置为私有,static private static Single s = new Single(); // 3. 提供一个static get方法,让外部类访问。 public static Single getInstance() { return s; } private int num ; public int getNum() { return num; } public void setNum(int num) { this.num = num; } }
懒汉式:
创建步骤:
1. 私有化构造方法
2. 在本类中创建引用,赋予空对象。(private static)
3. 为使外部使用该对象,提供一个静态getInstance()方法。在方法中判断对象是否为null,当对象为空时,创建该对象,赋给上面声明的引用。
class Single { private Single() {} private static Single s = null; // 当多线程调用该getInstance()方法的时候,会出现线程安全问题,需要加锁。 public static Single getInstance() { // 同步静态函数的锁是该类的字节码文件 即 Single.class synchronized(Single.class) { if(s == null) s = new Single(); } return s; } }
相关文章推荐
- 单例设计模式(饿汉式和懒汉式)
- 黑马程序员-面向对象-06天-6(单例设计模式-饿汉式,懒汉式)
- JAVA单例设计模式(饿汉式和懒汉式的区别)
- 设计模式——单例模式(饿汉式、懒汉式)
- 单例设计模式中懒汉式和饿汉式
- JAVA基础——单例设计模式(饿汉式与懒汉式)
- 黑马程序员--懒汉式和饿汉式单例设计模式
- 黑马程序员一单例设计模式的饿汉式与懒汉式以及加锁的情况
- 设计模式——单例模式(饿汉式、懒汉式)
- 【单例设计模式】懒汉式跟饿汉式的区别
- java单例设计模式 饿汉式 懒汉式
- (单例设计模式中)懒汉式与饿汉式在多线程中的不同
- Java模式设计之单例模式, 接上篇【饿汉式,懒汉式】
- 黑马程序员——java小结_007_单例设计模式(懒汉式、饿汉式)
- 《单例设计模式之饿汉式和懒汉式》
- Java 单例设计模式(懒汉式 饿汉式)
- java设计单例模式【饿汉式和懒汉式】
- 设计模式--单例模式(一)懒汉式和饿汉式
- Java设计模式中的单例模式的懒汉式和饿汉式
- 单例设计模式(懒汉式和饿汉式区别)