单例的设计模式代码演示 + 内存分析图详解
设计模式:解决某一类问题最行之有效的方法(手段)。
java中有23中设计模式。
单例设计模式:解决一个类在内存中只存在一个对象。
想要保证对象的唯一性:
1.为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象。
2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
3.为了方便其他程序对自定义对象的访问,可以对外提供一个访问方式。
这三步怎么用代码来体现呢?
1.将构造函数私有化。
2.在类中创建一个本类对象。
3.提供一个公共的方法可以获取到该对象。
1、饿汉式:先初始化对象
1 package com.wisezone.day06; 2 3 /** 4 * java中有23种对象设计模式 5 * 单例设计模式:解决一个类中只存在一个对象 6 * @author 王东海 @date. 2016年8月30日 7 * @version v1.0 8 */ 9 // 饿汉式:先初始化对象。 10 class Single { 11 12 // 1、将构造器私有化,不能在类的外部创建该类的对象 13 private Single() {} 14 15 // 2、创建对象,私有的,只能在类的内部访问 16 private static Single s = new Single(); 17 18 // 3、提供一个公共方法可以获取到对象 19 public static Single getInstance() { 20 return s; 21 } 22 } 23 24 public class SingleDemo { 25 public static void main(String[] args) { 26 //构造函数私有化后,我们就需要使用:类名.方法 27 Single s1 = Single.getInstance(); 28 Single s2 = Single.getInstance(); 29 System.out.println(s1);//com.wisezone.day06.Single@17b68215 30 System.out.println(s2);//com.wisezone.day06.Single@17b68215 31 } 32 }
在内存中分析
2、懒汉式
1 package com.wisezone.day06; 2 3 /** 4 * java中有23种对象设计模式 5 * 单例设计模式:解决一个类中只存在一个对象 6 * @author 王东海 @date. 2016年8月30日 7 * @version v1.0 8 */ 9 // 懒汉式:对象在调用时,才初始化,也称为对象的延时加载。 10 class Single2 { 11 12 // 1、将构造器私有化,不能在类的外部创建该类的对象 13 private Single2() {} 14 15 // 2、先声明类的引用 16 private static Single2 ss = null; 17 18 // 3、提供一个公共方法可以访问类的实例 19 public static Single2 getInstance() { 20 21 //3.1如果类的实例未创建,那些先要创建,然后返回给调用者:本类。因此,需要static 修饰。 22 if (ss == null) { 23 ss = new Single2(); 24 } 25 //3.2 若有了类的实例,直接返回给调用者。 26 return ss; 27 } 28 } 29 30 public class SingleDemo2 { 31 32 public static void main(String[] args) { 33 //构造函数私有化后,我们就需要使用:类名.方法 34 Single2 ss1 = Single2.getInstance(); 35 Single2 ss2 = Single2.getInstance(); 36 System.out.println(ss1);//com.wisezone.day06.Single2@28084850 37 System.out.println(ss2);//com.wisezone.day06.Single2@28084850 38 } 39 }
在内存中分析