在哪里有人做网站,如何优化网站标题,wordpress 文章阅读量,智能网站建设背景单例设计模式兄弟们好#xff0c;今天是最后一个设计模式了#xff0c;也是我们最熟悉的单例设计模式#xff0c;可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候#xff0c;老师聊到一个「饿汉式和懒汉式」#xff0c;我还纠结了半天#xff0…单例设计模式兄弟们好今天是最后一个设计模式了也是我们最熟悉的单例设计模式可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候老师聊到一个「饿汉式和懒汉式」我还纠结了半天这名字起的很完美。接下来我们一起复习一下单例设计模式吧。定义该类的实例仅仅存在一个。单个实例对象——单例模式我们直接上代码1. 懒汉式public class Single {private static final SingleDesgin singleDesgin new SingleDesgin();private Single(){}public SingleDesgin newInstance(){return singleDesgin ;}
}
直接在类加载的时候创建对象由虚拟机保证该对象仅仅被创建一次。「推荐使用」2. 懒汉式public class Single {private SingleDesgin singleDesgin ;private Single(){}public SingleDesgin newInstance(){if(singleDesgin null){singleDesgin new SingleDesgin();}return singleDesgin ;}
}
在多线程情况下可能会出现多个对象被常见线程不安全。「不推荐使用」3. 静态内部类public class Single {private Single(){}public SingleDesgin newInstance(){return SingleBuild.singleDesgin;}private static class SingleBuild{static SingleDesgin singleDesgin new SingleDesgin();}}
和懒汉式相同由虚拟机保证对象线程安全。与之不同的是把类加载时机交给了开发者「调用方法的时候」4. DCL单例public class Single {private volatile SingleDesgin singleDesgin ;public SingleDesgin newInstance(){if(singleDesgin null){synchronized (Single.class){if(singleDesgin null){singleDesgin new SingleDesgin();}}}return singleDesgin ;}}
双重加锁保证多线程安全通过volatile保证线程可见性和有序性。关于volatile关键字可以参考我之前的文章不过过几天我会发一篇完整讲述JMM模型的文章其中讲到了volatile可以「关注一波公众号」。打个广告哈哈哈5. 枚举实现public enum Single {INSTANCE
}
就这就这。这个操作来自于Java创始人的写法牛批优点线程安全肯定加载一次防止序列化缺点将一个类搞成了枚举不容易区分好啦以上就是所有我认为比较典型的单例设计模式的类型了至于说什么八种设计模式的写法无非也就是加一个静态代码块等等操作将一个操作分两步执行了没什么新鲜的上面五种比较典型兄弟们可以尽情享用。设计模式要结束了。明天或者后天会发一篇文章做一个总结并且计划一下接下来要做的事情明天晚上团建看晚上回来的时间吧。好啦兄弟们晚安呐。明天又是元气满满的一天呢。