单例设计模式

单例设计模式

  1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。

  2. 如何实现?
    饿汉式 和 懒汉式

  3. 区分饿汉式 和 懒汉式
    饿汉式:
    坏处:对象加载时间过长。
    好处:饿汉式是线程安全的

    懒汉式:好处:延迟对象的创建。
    坏处:不加线程锁是不安全的

饿汉式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class SingletonTest1 {
public static void main(String[] args) {
// Bank bank1 = new Bank();
// Bank bank2 = new Bank();

Bank bank1 = Bank.getInstance();
Bank bank2 = Bank.getInstance();

System.out.println(bank1 == bank2);//true
}
}

//饿汉式
class Bank{

//1.私有化类的构造器
private Bank(){

}

//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Bank instance = new Bank();

//3.提供公共的静态的方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}

懒汉式:

第一种:线程不安全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class SingletonTest2 {
public static void main(String[] args) {

Order order1 = Order.getInstance();
Order order2 = Order.getInstance();

System.out.println(order1 == order2);

}
}


class Order{

//1.私有化类的构造器
private Order(){

}

//2.声明当前类对象,没有初始化
//4.此对象也必须声明为static的
private static Order instance = null;

//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){

if(instance == null){

instance = new Order();

}
return instance;
}

}

第二种:线程安全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

public class ThreadSingle {
public static void main(String[] args) {

Order order1 = Order.getInstance();
Order order2 = Order.getInstance();

System.out.println(order1 == order2);

}
}

class Order{

//1.私有化类的构造器
private Order(){

}
//2.声明当前类对象,没有初始化
//4.此对象也必须声明为static的
private static Order instance = null;

//3.声明public、static的返回当前类对象的方法

public static Order getInstance() {

if(instance==null) {
synchronized (Order.class) {
if (instance == null) {

instance = new Order();

}

}
}
return instance;
}

}

评论 (tip: 昵称框输入QQ号即可评论)

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×