设计模式-单例
场景和问题:
在JAVA程序中,如何确保在运行期间,某个类只有一个实例在运行。
解决方案:
一:时间换空间,线程不安全,不过也可以加同步锁改成线程安全
public class One{ //3.创建一个类级属性one用来存储实例 private static One one=null; //1.不让外部实例 private One(){ } //2.返回实例化 public static One getInstance(){ //3.判断one是否为null if(one==null){ //3.1.是就创建个新的实例赋值给one one=new One(); } //4.返回该实例 return one; }}
二:空间换时间,线程安全
public class two{ //3.定义个类级属性two并为它创建个实例 private static Two two=new Two(); //1.不让外部实例化 private Two(){ } //2.返回实例 public static Two getInstance(){ return two; }}
单例模式体现的一些思想:
1.延迟装载(Lazy Load)
2.缓存
单例模式的变形使用:
在JAVA程序中,如何确保在运行期间,某个类只有n个实例在运行。
import java.util.*;public Demo{ //3.1.用来存储实例的容器 private static Map map=new HashMap(); //3.2.用来存储当前正在用的实例初始话为实例总数 private static int num=5; //1.让外部不能实例化 private Demo(){ } //2.返回实例 public static Demo getInstance(){ //4.1.用来存储实例变量值为null Demo demo=null; //4.2.用来存储实例的个数 int count=num; num=num%count+1; //5.判断容器中的key值是否有num if(demo=(Demo)map.get(num)==null){ //5.1如果没有新建一个实例赋值给demo demo=new Demo(); //6把demo添加到容器中key为num,并让num第增 demo.put(num++,demo); } //7.返回demo return demo; }}