java面试题之单利设计模式
单利设计模式
什么叫单利设计模式呢?
就是保证类在内存中只有一个对象。
Java 是万物皆对象 那么如何保证只能有一个对象呢?
* (1)控制类的创建,不让其他类来创建本类的对象。private
* (2)在本类中定义一个本类的对象。Demo d;
* (3)提供公共的访问方式。 public static Demo getMyDemo(){return d}
- 饿汉式单利
class Demo{
//私有构造方法,其他类不能访问构造方法
private Demo(){
}
//创建本类对象
private static Demo d = new Demo();
//对外提供公共的访问方法
public static Demo getMyDemo(){ //获取实力
return d;
}
}
我们创建一个类是不是可以创建多个对象?
但是为了让符合要求只能在内存中创建一个对象
我先想到的是私有了构造方法
私有构造方法后就不能创建类对象了,同时
让其他类不能访问我们私有的方法
所以我们不能直接
new Demo () [创建对象]
那么我们怎么创建对象使用呢?
为了能使用这个类 我就想到了直接在自己的类里创建一个对象
并且私有这个对象 让其静态对象 但是可以类名·调用
然后在用get 方法 定义一个静态的公共的方法,这里其实是对外提供一个访问方法 我在return 返回一个d
这样我们就可以 Demo d = Demo.getMyDemo();
另一种方式
- 懒汉式单利又称单利延迟加载模式
class Demo {
//私有构造方法,其他类不能访问构造方法
private Demo(){
}
//声明一个引用
private static Demo d;
//对外提供公共的访问方法
public static Demo getMyDemo(){ //获取实力
if (d==null) {
//线程1 线程2 都会等待 最后会创建2个对象
d = new B();
}
return d ;
}
}
看2中方式视乎下面的懒汉式会比饿汉式好 但是多线程执行懒汉式会创建多个对象 学过Runtime 类 研究过底层源码就可以知道是使用饿汉式实现的
他两的区别:
1.饿汉式是空间换时间,懒汉式是时间换空间
2.在多线程访问时,多线程访问不会创建多个对象,而懒汉式可能会创建多个对象