Android 幾種設計模式

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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章