本文主要是介绍Java设计模式之单例模式(SingleInstance),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
- 模式定义
- 需求背景
- 具体实现
模式定义
单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
需求背景
在App进程中保证类的实例唯一性,例如数据库访问入口等。
注意:构造函数可见性为private。这样使得外面的类不能通过引言来产生对象。
构造器(Constructor)声明为private的话,外面不能实例化,典型的单例模式和一些工具类(提供静态方法),都把构造器声明为private。所以要得到这个类的实例只能是类名.method()取的它实例。
具体实现
1 自己实现的单例模式
public class Singleton{
//单个实例声明为私有
private static SingleInstance mInstance;
.......
//构造方法声明为私有
private SingleInstance(){
}
......
//获取单例的公共入口public static SingleInstance getInstance() { if (mInstance == null) { //保证只有创建实例的时候才加锁,线程安全模型synchronized (SingleInstance.class) { if (mInstance == null) { mInstance = new SingleInstance(); } } } return mInstance; }
}
2 Android中提供的单例模式模板
public abstract class Singleton<T> {private T mInstance;protected abstract T create();public final T get() {synchronized (this) {if (mInstance == null) {mInstance = create();}return mInstance;}}
}
使用,例如获取ActivityManager的代理对象
public static IActivityManager getService() {return IActivityManagerSingleton.get();}private static final Singleton<IActivityManager> IActivityManagerSingleton =new Singleton<IActivityManager>() {@Overrideprotected IActivityManager create() {final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);final IActivityManager am = IActivityManager.Stub.asInterface(b);return am;}};
这篇关于Java设计模式之单例模式(SingleInstance)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!