单例模式

今天我们来说一说Java中23种设计模式中的单例设计模式:

其实单例设计模式很好理解,保证一个类只能存在一个对象

先看一段代码(不存在单例模式)

public class Single{

public static void main(String[] args){

Student s1 = new Student();

Student s2 = new Student();

s1.setAge(10);

System.out.println(s2.getAge());

}

}


class Student{

private int age;

public void setAge(int age){

this.age=age;

}

public int getAge(){

reutrn age;

}

}

代码分析:很显然结果是0。因为这段代码没有用到单例模式,所以是可以存在多个对象的。s1和s2是堆中的两个对象,指向栈中不同的内存地址。所以给s1赋值,而底层s1和s2是两个对象,所以s2的值依旧是0。


再看这段代码(使用了单例模式)

public class Single{

public static void main(String[] args){

Student s1 = Student.getStudent();

Student s2 = Student.getStudent();

s1.setAge(10);

System.out.println(s2.getAge());

}

}


class Student{

private int age;

public void setAge(int age){

this.age=age;

}

public int getAge(){

return age;

}


private Student(){}

private static Student s =  new Student();

private static Student getStudent(){

return s;

}

}

代码分析:这段代码的结果是10.以为这段代码使用了单例模式,使用单例模式就是只存在一个对象,所以这里的s1和s2底层是一个对象,所以给s1赋值就是给s2赋值,所以输出的是10.这里可能就有人要问问什么在Student类中为什么要用静态的方法。我们都知道调用类中的方法,可以是用“引用.”是调用,也可以是静态方法,用“类名.”去调用,这里显然没有对象,只能用类名去调了。

我们来总结一下单例模式的步骤:

1.将构造方法私有化
2.在类中创建一个本类对象
3.对外提供一个方法可以获取到该类对象


接下来我们来说一下单例模式里面的恶汉式和懒汉式

饿汉式:

先看一下下面的这段代码:

private Student(){}

private static Student s =  new Student();

private static Student getStudent(){

return s;

}

这段代码用到了饿汉式,先初始化对象

Student类一进内存,就已经创建好对象了


懒汉式:

先看看下面的代码:

private Single(){}

private  static Single s = null;

public static Single getInstance(){
if(s==null){
s = new Single();
}
return s;
}

这段代码用到了懒汉式,对象是方法被调用时,才初始化,也叫做对象的延时加载

Student类进内存,对象还没有存在,只有调用了getStudent方法时,才建立对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值