单例模式的三种写法

/**
 * 饿汉式-我不管你用不用我都提前最备好
 * 浪费内存
 *
 */
public class Singleton {

    //传参数没法做
    private static Singleton instance = new Singleton();

    private Singleton() {
        
    }

    public static Singleton getInstace() {
        return instance;
    }
}


/**
 * 通常写法
 * 
 * 懒汉式---当你使用的时候我就创建单例对象
 * 
 * 一般的客户端开发经常使用的解决方案 
 *
 */
public class Singleton {

	private static Singleton instance;

	private Singleton() {
		
	}

	//在服务器,或者多线程访问
	//服务器并发
	public static synchronized Singleton getInstace() {
		//假设:3个线程---并发线程
		//场景:同时调用getInstace方法
		//线程一:
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
	
}



/**
 * 双重检查(折中考虑,既不浪费内存,性能相对来说也比较高) 
 */
public class Singleton {

	//线程并发时候,当我们的变量被被修改之后,其他的并发线程及时收到通知,其他的线程就可以访问数据
	//volatile--会屏蔽虚拟机优化过程
	private volatile static Singleton instance;

	//iOS开发经常是这么搞的(基本上写单例都加索)
	private Singleton() {
	}

	public static Singleton getInstace() {
		if(instance == null){
			synchronized (Singleton.class) {
				if(instance == null){
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
	
}

另外在Android中也可使用枚举:

//场景
//分析:聊天消息的Adapter是不是消息类型
//你包括:文本消息、图片消息、文件消息、语言消息、表情消息、视频
//2012年6月份
//枚举高级编程--高级用法
public class ChatMessageAdapter extends BaseAdapter {

	// 枚举单例模式应用场景---经常遇到
	enum ChatMessageType{
		Text(R.layout.activity_main), Image(R.layout.activity_main), File(
				R.layout.activity_main), Voice(R.layout.activity_main), Video(
				R.layout.activity_main), Emoji(R.layout.activity_main);

		private int layoutId;
		
		private ChatMessageType(int layoutId) {
			this.layoutId = layoutId;
		}
		
		public int getLayoutId() {
			return layoutId;
		}
		
		public void close(){
			
		}
		
	}

	@Override
	public int getCount() {
		return 0;
	}

	@Override
	public Object getItem(int position) {
		return null;
	}

	@Override
	public long getItemId(int position) {
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		return null;
	}

}

整理自代码



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值