单例设计模式

2020-01-16  本文已影响0人  Liu积土成山
/**
 * 在第一次调用后getInstance方法时,对象被创建,到程序结束后释放
 */

class Factory {
    private int num;
    // 1.构造方法私有化,这样外部无法通过new来创建该对象
    private Factory() {
    }
    //2.声明本类变量
    private static Factory factory = null;
    // 3.使用public的函数把该对象返回,给外部提供一个方法来返回该对象,这个的好处是只有调用了该方才创建对象
    public static Factory getInsatnce() {
        if (factory == null) {
            // 4.增加锁,防止在多线程中出问题
            synchronized (Factory.class) {
                if (factory == null) {
                    factory = new Factory();
                }
            }
        }
        return factory;
    }

    public void jiagong() {
        System.out.println("当前加工的是第" + (++num) + "个零件");
    }
}

public class FactorySingle {
    public static void main(String[] args) {
        // f1 f2都是加载的同一个工厂,1到10因为是公用的同一个对象,如果是不同的两个对象则显示的都是1到5
        Factory f1 = Factory.getInsatnce();
        f1.jiagong();
        f1.jiagong();
        f1.jiagong();
        f1.jiagong();
        f1.jiagong();

        Factory f2 = Factory.getInsatnce();
        f2.jiagong();
        f2.jiagong();
        f2.jiagong();
        f2.jiagong();
        f2.jiagong();
        // 判断该对象是否用的同一个,这样就保证了Single这个类只能有一个
        System.out.println(f1 == f2);
    }
}

上一篇 下一篇

猜你喜欢

热点阅读