眨眼时间过了三年,消炎已经彻底掌握了七大设计原则,打下了无敌根基。而器灵java终于在今天传授给了他第二重功法:
《单例模式》
所谓单例模式,即涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
这第二重功法,有5个招式。
第一招:懒汉式
此招式贵在不需要初始化实例对象,只有在第一次调用时才进行实例化。第一招又分两式:线程不安全和线程安全
线程不安全:
public class Singleton {
private Singleton(){}
private static Singleton singleton = null;
public static Singleton getSingleton(){
if (singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
线程安全
ps:注意此方式效率很低
class SingletonSecurity{
private SingletonSecurity(){}
private static SingletonSecurity singletonSecurity = null;
public static synchronized SingletonSecurity getSingletonSecurity(){
if (singletonSecurity == null){
singletonSecurity = new SingletonSecurity();
}
return singletonSecurity;
}
}
第二招:饿汉式
这招比较常用,但容易产生垃圾对象。
- 优点:没有加锁,执行效率会提高。
- 缺点:类加载时就初始化,浪费内存。
class SingletonHungry{
private SingletonHungry(){}
private static SingletonHungry singletonHungry = new SingletonHungry();
public static SingletonHungry getSingletonHungry(){
return singletonHungry;
}
}
第三招:双重校验锁
ps:这招安全且在多线程情况下能保持高性能
class DoubleCheckSingleton{
private DoubleCheckSingleton(){}
private static volatile DoubleCheckSingleton doubleCheckSingleton = null;
public static DoubleCheckSingleton getDoubleCheckSingleton(){
if (doubleCheckSingleton == null){
synchronized (DoubleCheckSingleton.class){
if (doubleCheckSingleton == null){
doubleCheckSingleton = new DoubleCheckSingleton();
}
}
}
return doubleCheckSingleton;
}
}
第四招:静态内部类
这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用
class SingletonInnerClass{
private SingletonInnerClass(){}
private static class InnerClass{
static SingletonInnerClass singletonInnerClass = new SingletonInnerClass();
}
public static SingletonInnerClass getSingletonInnerClass(){
return InnerClass.singletonInnerClass;
}
}
第五招:枚举
这招简洁、高效、安全的实现单例的方式,实乃妙招!
enum SingletonEnum{
SINGLETON_ENUM;
public SingletonEnum getSingletonEnum(){
return SINGLETON_ENUM;
}
}
消炎本就是天才,此等功法招式他学起来可谓行云流水。仅仅耗费了3个月的时间,消炎就将单例模式这一重功法掌握到大成境界。
恰逢下个月就要举行家族比编程,消炎的脸上漏出一丝玩味的笑容,想来下个月,见到消炎如此功力,一些人的脸上的表情应该会很精彩
等着吧,我消炎马上就要向你们证明,到底谁才是废材!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71743.html