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 }
![]()