设计模式之一 -----单例模式

    昨晚睡不着,学习了一下设计模式(Design Pattern)中的单例模式(Siglenton Pattern).

    所谓单例模式,就是在系统或者模块中该类存在且只能存在一个实例,废话不多说,直接上代码。

   首先懒的单例模式

   SiglentonLazy.java

  package guancan.siglentonPattern;

public class SiglentonLazy {
 /*构造函数,必须声明为私有,因为单例故名思意就是
   该类的实例只能有一个,现在先介绍单例模式中的懒模式
   所谓懒模式就是指该类在被调用的时候才被JVM加载
   by guancan 20141213
 */
 //构造函数私有,保证该类不会在外面被实例化
 private SiglentonLazy(){
 }
 //声明该类的一个成员变量,即该类的一个实例,为了保证对象的唯一性,
 //该成员变量必须要是static 的,即该成员是类成员不是对象成员(
 //static的使用有空再说)
 private static SiglentonLazy instance;
 //获取类的成员对象,同时只有在需要调用的时候该类才会被JVM加载
 public static SiglentonLazy getInstance(){
  if(instance == null){
   instance = new SiglentonLazy();
  }
  return instance;
 }
}

其次饥饿的单例模式 SiglentonHungry.java

package guancan.siglentonPattern;
/*顾名思义,饥饿的单例模式就是这个对象比较饥饿,在JVM开始加载类的时候就要
 * 把该类的实例加载 add by guancan 22141213
 * */
public class SiglentonHungry {
 //构造函数,因其私有所以不能在外部被实例化
 private SiglentonHungry(){
  
 }
 //在成员变量中直接实例化,保证类的实例始终存在
 private static SiglentonHungry instance = new SiglentonHungry();
 //暴露给外部的成员变量
 public static SiglentonHungry getInstance(){
  return instance;
 }
}

最后测试代码 Test.java

package guancan.siglentonPattern;
//测试代码 add by guancan 20141213
public class Test {
 public static void main(String[] args){
  SiglentonLazy s1 = SiglentonLazy.getInstance();
  SiglentonLazy s2 = SiglentonLazy.getInstance();
  //创建两个SiglentonLazy的实例,如果是单例模式二者应该是同一个实例
  if(s1.hashCode() == s2.hashCode()/*s1 == s2*/){
   System.out.println("懒的单例模式");
  }else{
   System.out.println("不是懒模式");
  }
  //创建两个SiglentonHungry的实例,如果是单例模式二者应该是同一个实例
  SiglentonHungry s3 = SiglentonHungry.getInstance();
  SiglentonHungry s4 = SiglentonHungry.getInstance();
  if(s3.hashCode() == s4.hashCode()/*s3 == s4*/){
   System.out.println("饥饿的单例模式");
  }else{
   System.out.println("不是懒模式");
  }
 }
}
总结:都在注释里了,单例模式应用如系统时钟类等,凡是只能有一个实例的就用单例模式



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值