设计模式之单例模式
//单例
//饿汉
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {};
public static Singleton getInstance() return instance;
}
//懒汉 线程不安全
public class Singleton {
private static Singleton instance;
private Singleton() {};
public static Singleton getInstance() {
if (instance == null) instance = new Singleton();
return instance;
}
}
//懒汉线程安全
public class Singleton {
private static Singleton instance;
private Singleton() {};
private static synchronized Singleton getInstance() {
if (instance == null) instance = new Singleton();
return instance;
}
}
//双重检查模式DCL
public class Singleton {
private static Singleton instance;
private Singleton() {};
private static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
return instance;
}
}
}
}
//静态内部类 推荐
public class Singleton {
private Singleton () {
public static Singleton getInstance() {
return SingletonHolder.instacne;
}
}
public static class SingletonHolder {
private static final Singleton instacne = new Singleton();
}
}
//枚举单例
public enum Singleton {
INSTANCE;
public void doSomething() {
};
}
在android中的应用
单例模式之Activty管理类方便及时移除activity等等对activity的管理
public class ActivityManager {
private static volatile ActivityManager instance;
private final Stack<Activity> mActivities;
private ActivityManager () {
mActivities = new Stack<>();
}
public ActivityManager getInstance() {
if (instance == null) {
synchronized (ActivityManager.class) {
if (instance == null) instance = new ActivityManager();
}
}
return instance;
}
public void attach(Activity activity) {
mActivities.add(activity);
}
/**
* 移除解绑
* @return
*/
public void dettch(Activity dettchActivity) {
int size = mActivities.size();
for (int i = 0; i < size; i++) {
Activity activity = mActivities.get(i);
if (activity == dettchActivity) {
mActivities.remove(i);
i--;
size--;
}
}
}
/**
* 关闭当前activity
* @return
*/
public void finish(Activity finishActivity) {
int size = mActivities.size();
for (int i = 0; i < size; i++) {
Activity activity = mActivities.get(i);
if (activity == finishActivity) {
mActivities.remove(i);
activity.finish();
i--;
size--;
}
}
}
/**
* 根据activity的类名关闭activity
* @return
*/
public void finish(Class<? extends Activity> activityClass) {
int size = mActivities.size();
for (int i = 0; i < size; i++) {
Activity activity = mActivities.get(i);
if (activity.getClass().getCanonicalName().equals(activityClass.getCanonicalName())) {
mActivities.remove(i);
activity.finish();
i--;
size--;
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
// int size = mActivities.size();
// for (int i = 0; i < size; i++) {
// Activity activity = mActivities.get(i);
// activity.finish();
// }
// mActivities.clear();
Iterator<Activity> activityIterator = mActivities.iterator();
while (activityIterator.hasNext()) {
Activity activity = activityIterator.next();
activityIterator.remove();
activity.finish();
}
}
public Activity currentActivity() {
return mActivities.lastElement();
}
public void exitApplication() {
finishAllActivity();
System.exit(0);
// android.os.Process.killProcess(android.os.Process.myPid());
}
}