1 package day1_28; 2 import org.junit.Test; 3 4 /** 5 *单例设计模式 6 * 1.1是什么 7 * 就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例 8 * 1.2 好处 9 * 由于单例模式只生成一个实例,减少了系统性能的开销,当一个对象的产生需要比较多的资源 10 * 时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时产生一个单例对象,然后永久 11 * 驻留内存的方式来解决 12 * 13 * 2.如何实现? 14 * 饿汉式 vs 懒汉式 15 * 16 * 3.区别 17 * 饿汉式:(可以看看Runtime源码) 18 * 坏处:提前把对象就创建好了,但是有可能很久才会用,或者一直也用不上,就导致对象加载时间过长 19 * 好处:线程安全的 20 * 懒汉式: 21 * 坏处:目前的写法是线程不安全的,---> 多线程内容时,再修改 22 * 好处:延迟对象的创建,什么时候用就什么时候创建 23 * 24 */ 25 public class SingletonTest { 26 @Test 27 public void test1(){ 28 Bank bank1 = Bank.getInstance(); 29 Bank bank2 = Bank.getInstance(); 30 System.out.println(bank1); 31 System.out.println(bank2); 32 System.out.println(bank2 == bank1); 33 } 34 35 @Test 36 public void test2(){ 37 Order Order1 = Order.getInstance(); 38 Order Order2 = Order.getInstance(); 39 System.out.println(Order1); 40 System.out.println(Order2); 41 System.out.println(Order2 == Order2); 42 } 43 } 44 45 //饿汉式(不管你用不用提前就创建好对象) 46 class Bank{ 47 //2.内部创建类的对象 48 //4.要求此对象也必须声明为静态的(为了步骤3调用) 49 private static Bank instance = new Bank(); 50 51 //1.私有化类的构造器 52 private Bank() { 53 } 54 55 //3.提供公共的静态方法,返回类的对象 56 public static Bank getInstance() { 57 return instance; 58 } 59 } 60 61 //懒汉式(用的时候才创建对象) 62 class Order{ 63 64 private static Order instance = null; 65 66 private Order(){ 67 } 68 69 public static Order getInstance() { 70 if (instance == null) { 71 instance = new Order(); 72 } 73 return instance; 74 } 75 }