黑马程序员--设计模式——单例设计模式

------- android培训java培训、期待与您交流! ----------


单例设计模式:解决一个类在内存中只存在一个对象(只有一个实例)

想要保证唯一性:
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
2.为了让其他程序可以访问该对象,只好在本类中,自定义一个对象
3.为了让其他程序对该自定义的对象进行访问,可以对外提供一些访问方式

用代码如何体现??
1.将构造函数私有化
2.在类中建立一个本类对象
3.提供一个方法可以取到该对象(get方法)
体现形式:
方式一:饿汉式;方式二:懒汉式
原则上:建议使用饿汉式

方式一:饿汉式
代码表现:

class Single {
private Single() {
}

private static Single s = new Single();

public static Single getInstance() {
return s;//返回s对象
}
}

class SingleDemo {
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
}
}


对于事物该怎么描述,还怎么描述。
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
class Student {
private int age;
//第一步创建自己的对象
private static Student s = new Student();
//第二步 建立一个调用本类对象的方法
public static Student getStudent() {
return s;
}
//第三步私有的空参构造函数(因为new Student()没传参,所以此无参构造函数必须要加)
private Student() {
}
//set方法
public void setAge(int age) {
this.age = age;
}
//get方法
public int getAge() {
return age;
}
}


class SingleDemo {
public static void main(String[] args) {
//第四步(测试)
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2);==>运行结果true
}
}


以上的方式为先初始化对象,称为饿汉式
============================================================
方式二:懒汉式
以下的方式为对象是方法调用时,才初始化,也叫对象的延时加载。叫做:懒汉式

代码提现:(此代码存在弊端)
class Single {

private static Single s = null;

private Single() {
}

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


class SingleDemo {
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.println(s1 == s2);
}
}

============================================================
一般情况下:使用饿汉式,懒汉式容易出现一个问题(不安全)

代码改良方式一:

代码改良方式二:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值