单力设计模式(实例)

单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:

     1、控制资源的使用,通过线程同步来控制资源的并发访问;

     2、控制实例产生的数量,达到节约资源的目的。

     3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

单例模式有一下特点:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

懒汉式:

package cn.Instance.impl;

public class Instance_1 {
    //在内存中缓存一个实例空间
    private static Instance_1 instance_1 =null;
    //收回外部类实例的权限
    private Instance_1(){
       
    }
    public static Instance_1 getInstance_1(){
        //对于线程不安全的代码进行同步
        synchronized(Instance_1.class){
            //判断是否存在类实例如果不存在就实例化一个
            if (instance_1==null) {
                instance_1=new Instance_1();
               
            }
        }
        //如果存在就返回已存在的
        return instance_1 ;
    }

}
饿汉式:

package cn.Instance.impl;

public class Instance_2 {
    //在类加载的时候就实例化一个类实例
    private Instance_2 instance_2=new Instance_2();
    //收回外部对于该类的实例化权限
    private Instance_2(){
       
    }
    //定义返回实例的方法
    public Instance_2 getInstance_2(){
        return instance_2;
    }
}
登记式——控制实例的数量:

package cn.Instance.impl;

import java.util.HashMap;
import java.util.Map;

public class Instance_3 {
    private static Map map=new HashMap();
    //定义当前实例个数
    private static int NUM=1;
    //定义最大实例个数
    private static int COUNT=3;
   
    public static Instance_3 getInstance_3() {
        Instance_3 instance_3=(Instance_3) map.get(NUM);
        //判断是否存在实例
        if (instance_3==null) {
            instance_3=new Instance_3();
            map.put(NUM, instance_3);           
        }
        NUM++;
        //判断是否超过限定的实例个数
        if (NUM>COUNT) {
            NUM=1;           
        }           
        return instance_3 ;
       
    }
   

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章