1. 单例模式的本质:
控制实例数目(目的节约资源)
2. 单例模式体现的一些思想:
(1)延迟装载(Lazy Load):懒汉式
(2)缓存:饿汉式
3. 单例模式的变形使用:
控制使用实例个数为3个(实例池):
1 package com.himi.hebao.singleinstance; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class Person { 7 // 定义用来缓存数据的容器 8 private static Map map = new HashMap(); 9 // 用来记录当前正在使用哪一个实例,初始化值为1 10 private static int num = 1; 11 // 用来记录需要控制的实例的总数为3个 12 private static int count = 3; 13 14 // 私有化Person构造方法 15 private Person() { 16 } 17 18 public static Person getInstance() { 19 // 1.到缓存里面查找需要使用的数据 20 Person person = (Person) map.get(num); 21 // 1.1 如果找不到 22 if (person == null) { 23 // 就新建一个数据(或者获取一个数据) 24 person = new Person(); 25 // 然后把新的数据设置回到缓存中 26 map.put(num, person); 27 } 28 // 每一次调用,就设置num加1; 29 num++; 30 // 如果num超过需要控制的总数,那么把num设置为1,开始重复循环使用 31 if (num > count) { 32 num = 1; 33 } 34 // 1.2 如果找到了就直接使用 35 return person; 36 } 37 38 public static void main(String[] args) { 39 Person person1 = Person.getInstance(); 40 System.out.println("person1====="+person1); 41 42 Person person2 = Person.getInstance(); 43 System.out.println("person2====="+person2); 44 45 Person person3 = Person.getInstance(); 46 System.out.println("person3====="+person3); 47 48 Person person4 = Person.getInstance(); 49 System.out.println("person4====="+person4); 50 51 Person person5 = Person.getInstance(); 52 System.out.println("person5====="+person5); 53 } 54 55 }
运行效果如下: