/**
* 在第一次调用后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);
}
}
网友评论