单例模式

来源:互联网 发布:淘宝账户怎么修改名字 编辑:程序博客网 时间:2024/05/22 05:18

最近在学习设计模式,思前想后不知从何学起,就从大家最熟悉的单例模式学吧!

下面是我写的单例模式的代码,我感觉比较清晰,大家都能看懂吧。

单例模式我主要觉得应该分为两种,一种是懒汉式,一种是饿汉式。说到这里大家可能不知道区分吧,我就说下自己认为容易理解的话吧。

懒汉式:顾名思义,懒汉就是一说一下,我做一下,就像是懒汉式的代码如下

public class Singleton{

private Singleton(){}  

public static Singleton getIntance(){
  if(intance == null)
   intance = new Singleton();
  return intance;
}

private static Singleton intance = null;

}

大家仔细分析getIntance(),这个方法就会发现,供外界访问的就这一个方法,只有当外界访问时,他才会判断这个唯一的实例intance是不是空,为空则初始化,这是不是很像一个懒人呀,要别人在后面赶着走。哈哈

 

饿汉式:就像是总是吃不饱,在还没用他是,他自己都吃完了,即已经初始化了,下面是饿汉式代码,不知这样说大家能否看懂。

public class Singleton {
 private Singleton(){}
public static Singleton getIntance(){
  return intance;
}
 private static final Singleton intance = new Singleton();
}

 

接下来我们讨论下为啥要用单例模式,我举个例子,大家应该都打印过东西吧,一个打印机,应该对应一个打印程序,但同时一个打印程序,也可以对应很多打印机。当我们打印时,只要调用打印的方法就行了,即我们可以看成打印程序是个单例类,而打印机是多个访问程序,说的似乎有点乱,笔者语文功底不咋地,各位别介怪。

 

下面我们来分析下单例模式到底应该怎么写,

以下是我的理解;

1、单例之所以为单例,即限制了他的访问方法必须的唯一的,则我们可以得到那他的构造器必须是私有的,即不能再给外界提供访问权限:private Singleton(){};

2、上面一个我们也说了他要给外界提供访问的方法,则方法不能再是private的了,则应该是public Singleton getIntance(){}

3、因为外部访问时会传个值进来,则单例类本身必须提供一个变量来保存他,且只能实例化一次,即我们应该用static修饰,如private static Singleton intance = null;

4、那么方法就应该改为public Singleton getIntance(){   if(intance == null)   intance = new Singleton();  return intance;  }

 

下面为我写的单例模式,两个写到一起了,有点乱,大家别介意呀!

package cn.makemiracle.designmodel;

//单例模式
public class Singleton {

 //1.只有一个实体,即只能加载一次,则需要一个私有的构造器
 private Singleton(){}
 //2.因是私有的构造器,则应该提供一个公外界访问的方法
 public static Singleton getIntance(){
  
  //a. 此处分为懒汉式和饿汉式
  //a.1 懒汉式,判断值是否为空,为空则初始化
  if(intance == null)
   intance = new Singleton();
  return intance;
 }
 //3.因需要外界通过方法访问,则必须有一个变量来保存返回的值
 private static Singleton intance = null;
 
 //a.2饿汉式,直接在初始化时就给
// private static final Singleton intance = new Singleton();
}

原创粉丝点击