Java设计模式之单例设计模式

来源:互联网 发布:仿卷皮源码 编辑:程序博客网 时间:2024/06/08 00:42

1.单例设计模式

  • 懒汉式与饿汉式有什么不同?
    懒汉式的特点在于实例的延迟加载。
  • 懒汉式延迟加载有没有问题?
    有,如果多线程访问时会出现安全问题。
  • 如何解决?
    可以加同步来解决,但是稍微有些低效(同步代码块和同步函数都行),可以通过双重判断来解决低效问题,提高效率。

2.代码实现

(1)饿汉式

package com.zhoujian.singgleinstance.single;/** * Created by zhoujian on 2016/12/5. *//** * 饿汉式 */public class SingleOne{    //私有构造函数,防止被实例化    private SingleOne(){}    //创建对象    private static final SingleOne mSingleOne = new SingleOne();    //获取对象    public static SingleOne getInstance()    {        return mSingleOne;    }}

(2)懒汉式

package com.zhoujian.singgleinstance.single;/** * Created by zhoujian on 2016/12/5. *//** * 懒汉式 */public class SingleTwo{    //私有构造函数,防止被实例化    private SingleTwo()    {    }    private static SingleTwo mSingleTwo = null;    public static SingleTwo getSingleInstance()    {        if (mSingleTwo == null)        {            synchronized (SingleTwo.class)            {                if(mSingleTwo == null)                {                    mSingleTwo =new SingleTwo();                }            }        }        return mSingleTwo;    }}

3.测试代码

package com.zhoujian.singgleinstance.activity;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;import com.zhoujian.singgleinstance.R;import com.zhoujian.singgleinstance.single.SingleTwo;public class MainActivity extends Activity{    private SingleTwo mInstanceone;    private SingleTwo mInstanceteo;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mInstanceone = SingleTwo.getSingleInstance();        mInstanceteo =  SingleTwo.getSingleInstance();        if (mInstanceone==mInstanceteo)        {            Toast.makeText(this, "两个对象是同一个对象", Toast.LENGTH_SHORT).show();        }    }}

4.源码下载地址

源码下载地址:https://github.com/zeke123/SingleInstance

0 0
原创粉丝点击