您的位置:首页 > 职场人生

单例模式的几种用法

2018-01-23 10:44 176 查看
今天(2018.1.23)我们来总结一下单例模式的几种用法,单例模式在面试中还是常见的,面试官通常要求我们写出一个单例模式,现在我来贴代码!

package test;

/**

 * 单例模式的意思就是说保证一个类只能被实例化一次,有几种用法呢,他究竟是怎么实现的呢,现在我们就来看一下

 * @author
wuhaonan

 *Date:2018/1/23

 */

/**

 * 对于系统中的某些类来说,只有一个实例很重要,

 * 例如,一个系统中可以存在多个打印任务,

 * 但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,

 * 但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程)。如果不是用机制对窗口对象进行唯一化将弹出多个窗口,

 * 如果这些窗口显示的都是相同的内容,重复创建就会浪费资源。

 */

//第一种首先我们来写饿汉式,在类加载的时候不初始化

//这种写法缺点是多线层不能工作;

public class SingletonDemo1 {

private
static SingletonDemo1 instance;//声明对象但并没有对类进行初始化

private SingletonDemo1() {}//无参构造

public
static SingletonDemo1 getinstance() {

if(instance==null) {

instance=new SingletonDemo1();

}

return
instance;

}

//懒汉,线层安全,在方法中加了synchronized锁,优点可以更好的为线层工作,缺点:因为锁效率会很低

 public class SingletonDemo2()
{

private
static SingletonDemo2 instance;

private SingletonDemo2() {}

public
static synchronized SingletonDemo2
getinstance() {

if(instance==null) {

instance=new SingletonDemo2();

}

return
instance;

}

 }

 //接下来我们来讲下一种饿汉式,这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化

 public
class Singleto
4000
nDemo3() {

private
static SingletonDemo2
instance=new SingletonDemo2();

private SingletonDemo2() {}

public
static SingletonDemo2 getinstance() {

return instance;

}

}

 //饿汉(变种),加入了static静态代码快,我们都知道类加载的时候首先会执行静态代码快

 public 
class SingletonDemo4() {

private
static SingletonDemo4
instance =
null;

static
{

instance=new SingletonDemo4(); 

}

private SingletonDemo4() {}

public
static SingletonDemo4 getInstance(){

        return instance;

    }

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息