Singleton模式主要作用是什么?是写出一个完整的Singleton模式的程序,注意风格
单子模式,主要用于单线程。
有懒汉,和恶汉式区别。
public class Env() {
private Env env;
public Env getInstance(){
if(env==null){
env=new Env();
}
return env;
}
private Env(){
}
}
如何在java中实现singleton模式
单例模式大致有五种写法,分别为懒汉,恶汉,静态内部类,枚举和双重校验锁。
1、懒汉写法,常用写法
class?LazySingleton{
????private?static?LazySingleton?singleton;
????private?LazySingleton(){
????}
????public?static?LazySingleton?getInstance(){
????????if(singleton==null){
????????????singleton=new?LazySingleton();
????????}
????????return?singleton;
????}???
}2、恶汉写法,缺点是没有达到lazy loading的效果
class?HungrySingleton{
????private?static?HungrySingleton?singleton=new?HungrySingleton();
????private?HungrySingleton(){}
????public?static?HungrySingleton?getInstance(){
????????return?singleton;
????}
}3、静态内部类,优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
class?InternalSingleton{
????private?static?class?SingletonHolder{
????????private?final?static??InternalSingleton?INSTANCE=new?InternalSingleton();
????}???
????private?InternalSingleton(){}
????public?static?InternalSingleton?getInstance(){
????????return?SingletonHolder.INSTANCE;
????}
}4、枚举,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
enum?EnumSingleton{
????INSTANCE;
????public?void?doSomeThing(){
????}
}5、双重校验锁,在当前的内存模型中无效
class?LockSingleton{
????private?volatile?static?LockSingleton?singleton;
????private?LockSingleton(){}
????public?static?LockSingleton?getInstance(){
????????if(singleton==null){
????????????synchronized(LockSingleton.class){
????????????????if(singleton==null){
????????????????????singleton=new?LockSingleton();
????????????????}
????????????}
????????}
????????return?singleton;
????}
}
两种单例模式有什么不同啊?
前一个单例的创建是在第一次调用方法时。
后一个单例的创建是实例化该类后就创建了。
但是笔者认为,后一个不是单例模式。
因为他可以同时创建多个对象。
而前一个虽说是,但不严谨,没考虑到同步问题。
在其得到实例方法中最好加上synchronized(同步)关键字…我手机回的。
具体的你可以百度下资料的。
写一个Singleton出来
1、饱汉模式
2、饥汉模式
3、用枚举
扩展资料
Singleton模式
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:?
1、第一种形式:
2、第二种形式:?
参考资料:单例模式