设计模式—单例

来源:互联网 发布:第一财经软件 编辑:程序博客网 时间:2024/05/17 08:38

设计模式-单例

场景和问题:
在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;   }}
	
				
		
原创粉丝点击