Java的设计模式——单例

本文深入探讨了单例设计模式的概念及其实现方式,包括懒汉式和饿汉式的具体实现,并进一步介绍了如何通过缓存机制扩展单例模式,形成多例的变种。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式:解决问题的一种行之有效的思想,用于解决特定环境下重复出现的特定问题的解决方案。
       单例:在系统中某个类的对象只需要存在一个,以便节约资源和空间,只是单例是最好的解决方案。
比如从电脑系统中获取的日历类,从图中可以看出,所有的哈希地址都是相同的,表明他们同一个类(该类还用到了工厂的设计模式),用户访问的时候只需要访问同一个就行了,电脑系统的时间本来就是单一的。

下面写几个简单的单例,
懒汉式:没用到我我就不new对象,用到我的时候再在类模版里生成一个对象,一定程度上省了空间
public class Single {
private static Single s = null;//必须是静态的,下面的静态函数要用,同时也是把它存在类模版里
private Single(){//必须写成私有的,这样才能把new对象控制在自己手里
}
public synchronized static Single getInstace(){//给该方法加锁,否则在线程的时候容易出错
if(s==null){//如果s是空的,就new一个新的给使用类,否则就返回原来的
s = new Single();
}
return s;
}
}
饿汉式:一开始我就在类模版中生成这样一个对象,要用时就直接拿过去用,内存相对懒汉来说耗费多,但时间上要快
//饿汉式
public class Single2 {
private final static Single2 s = new Single2();//要定义成最终变量,以防止改动
private Single2(){
}
public static Single2 getInstance(){
return s;
}
}

单例再加上缓存(多例)
单例的变种,加上缓存,用MAP来存储对象,同时保证MAP的唯一性,还可按照情况控制MAP中对象的数量
public class AA {
   private static Map<Integer, AA> map = new HashMap<Integer, AA>();
   private static int count = 3;//控制缓存中实例的总数(该整数可以采用用户设置或读取配置文件的方式更改)
   private static int num=1;//当前实例的序号---用num来当作内部维护的key
   public static AA getInstance(){
  AA a = map.get(num);
  if(a==null){
  a = new AA();
  map.put(num, a);
  }
  num++;
  if(num>count){//循环用
  num=1;
  }
  return a;
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值