饿汉式
:加入final修饰对于模式实现本身无影响
//创建该类型的私有静态实例
private static final SingletonOne instance = new SingletonOne();
//创建公有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
懒汉式
:加入final修饰产生编译报错,提示信息为:无法对final修饰的成员进行操作。
原因是:final修饰的静态成员,如果在定义时未进行实例化,则需要在静态代码中去实现,而不能到类方法中才进行实例化。
// 创建静态的该类实例对象
private static final SingletonTwo instance = null;
// 创建开放的静态方法提供实例对象
public static SingletonTwo getInstance(){
if(instance==null)
instance = new SingletonTwo();//报错
return instance;
}
从应用层面来说:
如果饿汉式
的程序代码中不仅涉及创建对象及返回的功能,还包括其他的功能,譬如资源回收等,就不能假如final修饰,会影响程序功能实现。
总结:
- 懒汉式中不能加入final。
- 如果在饿汉式代码中,对类实例只涉及创建和返回方法,可以加入final修饰。