单例VS多例

来源:互联网 发布:小智外设店淘宝网 编辑:程序博客网 时间:2024/06/07 02:50

 

     单例模式在我们日常写程序中会用的比较多,例如当我们的程序中提供了配置文件,根据这些配置文件中的内容来决定我么该创建什么类型

 

的对象,但是IO操作是很浪费时间的,所以在这种情况下,我们就应该使用一个单例模式的类来在程序启动的时候,直接读取配置文件,然后缓

 

存起来,这样就避免了多次的IO操作,导致机器时间的浪费。但是,使用单例模式也有确定,例如我们在程序运行的时候修改了配置文件,这样

 

就会导致这种修改会无效,只有在重新启动程序之后,才会起作用,好了不多说了。

 

      单例模式就是在JVM中只存在一个这个类的实例,要想做到这一个点,我们就需要将这个类的构造方法私有化,限制其他类调用这个类的构

 

造方法,但是我们还是需要这个类的实例呀,所以我们就在这个类的内部调用构造方法,来创建这个类的对象,怎么样才能保证实例的唯一性

 

呢?对,用静态程序员。好了,看代码!

 

package viekie.du.Facatory;
/*
 * 单例模式
 */
public class Car {

    private static Car instance = null;

 

    private Car()


    public static Car getInstance(){
       
        if(null==instance){
            instance = new Car();
        }
        return instance;
    }
}

 

     再来看看多例模式,多例模式类似于连接池,将对象进行缓存,避免重复创建浪费时间,它与单例模式很相似。

 

package viekie.du.Facatory;

import java.util.ArrayList;

/*
 * 多例模式
 */
public class Car {

    private static int index = 0;
    private static ArrayList<Car> instance = new ArrayList<Car>();
   
    private Car(){}
   
    private static void init(){       
        index = 0;
        for(int i=0; i<10; i++){
            Car c = new Car();   
            instance.add(c);
        }
    }
    public static Car getInstance(){
       
        Car c = null;
        if(null==instance || instance.size()!=0){
            c = instance.get(index);
        }else{
            init();
            c = getInstance();
        }
        instance.remove(index);
        index++;
        return c;
    }
}

原创粉丝点击