单例模式的传参

概述

创建单例类的时候应该支持参数的传递,比如我们创建一个连接池的单例对象,就需要通过参数来指定连接池的大小,怎么做呐?

public class IdGeneratorLh {
     

    //单例模式,懒汉式
    private AtomicLong id = new AtomicLong();
    //创建一个静态实例,方便外界获取
    private static IdGeneratorLh instance;
    private static int size;

    private IdGeneratorLh(){
     }

    public IdGeneratorLh(int size){
     

        this.size = size;

    }

    public synchronized IdGeneratorLh getInstance(int size) throws Exception {
     

        if (instance==null){
     
            instance = new IdGeneratorLh(size);
        }

        //保证类只能被初始化一次
        if (this.size!=0&&this.size!=size){
     
            throw new Exception("该类已被初始化,不能再次初始化!");
        }

        return instance;

    }

    public long getId(){
     

        return id.incrementAndGet();

    }

    public int getSize() {
     
        return size;
    }

    public static void main(String[] args) throws Exception {
     

        IdGeneratorLh instance = new IdGeneratorLh().getInstance(10);
        System.out.println(instance.getSize());
        IdGeneratorLh instance2 = new IdGeneratorLh().getInstance(30);
        System.out.println(instance2.getSize());

    }

}

你可能感兴趣的:(设计模式)