1.單例模式 (推薦使用懶漢和DCL模式)
//懶漢單例
public class Singleton {
private static Singleton mInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (mInstance == null) {
mInstance = new Singleton();
}
return mInstance;
}
}
//DCL單例
public class Singleton {
private volatile static Singleton mInstance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (mInstance == null) {
synchronized (Singleton.class) {
if (mInstance == null) {
mInstance = new Singleton();
}
}
}
return mInstance;
}
}
//靜態內部類單例
public class Singleton {
private volatile static Singleton mInstance = null;
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.mInstance;
}
private static class SingletonHolder {
private static final Singleton mInstance = new Singleton();
}
}
//枚舉單例
public enum SingletonEnum {
INGLETON;
}
//使用容器實現單例
public class SingletonManager {
private static Map<String,Object> objMap = new HashMap<>();
private SingletonManager() {
}
public static void registerService(String key,Object instance) {
if (!objMap.containsKey(key)) {
objMap.put(key,instance);
}
}
public static Object getService(String key) {
return objMap.get(key);
}
}
2.Builder模式
//女朋友配置類 避免目標類中有過多的接口
public class GirlFriendConfig {
/**
* 姓名 年齡 身高
*/
String name = "未知";
int age;
int height = 165;
private GirlFriendConfig() {
}
public static class Builder {
String name;
int age;
int height;
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setHeight(int height) {
this.height = height;
return this;
}
private void applyConfig(GirlFriendConfig config) {
config.name = this.name;
config.age = this.age;
config.height = height;
}
public GirlFriendConfig create() {
GirlFriendConfig config = new GirlFriendConfig();
applyConfig(config);
return config;
}
}
}
//女朋友
public class GirlFriend {
private final static String TAG = "GirlFriend";
private static GirlFriend mInstance;
private GirlFriendConfig mConfig;
private GirlFriend() {
}
public static GirlFriend getInstance() {
if (mInstance == null) {
mInstance = new GirlFriend();
}
return mInstance;
}
public void init(GirlFriendConfig config) {
this.mConfig = config;
}
public void showGirlFriend() {
Log.w(TAG, "姓名:" + mConfig.name + "/年齡:" + mConfig.age == null ? "保密" : mConfig.age + "/身高:" + mConfig.height);
}
public void dissGirlFriend() {
Log.w(TAG,"diss? 想都不要想");
}
}
//您的女朋友
private void newGirlFriend() {
GirlFriendConfig config = new GirlFriendConfig.Builder()
.setName("古力娜扎")
.setHeight(172)
.create();
GirlFriend.getInstance().init(config);
GirlFriend.getInstance().showGirlFriend();
GirlFriend.getInstance().dissGirlFriend();
}