簡體   English   中英

當創建具有不同值的對象時,如何避免很多if條件

[英]How to avoid a lot of if else if conditions when there is creation of object with different values

我有一個具有ID和名稱的四個不同的枚舉UserOneStatus,UserTwoStatus,UserThreeType和UserFourType

我必須根據那些枚舉ID來過濾用戶,所以最終得到以下代碼

if (ChoosenUserFilterValue.equals(String.valueOf(UserOneStatus.REQUESTED.getId()))) {
            selecedUserFilter = new UserFilter(UserOneStatus.class,
                    String.valueOf(UserOneStatus.REQUESTED.getId()),
                    UserOneStatus.REQUESTED.getUserStatus(), String.valueOf(UUID.randomUUID()));
        } else if (ChoosenUserFilterValue.equals(UserOneStatus.ACTIVE.getId() + "")) {
            selecedUserFilter = new UserFilter(UserOneStatus.class,
                    String.valueOf(UserOneStatus.ACTIVE.getId()),
                    UserOneStatus.ACTIVE.getUserStatus(), String.valueOf(UUID.randomUUID()));
        } else if (ChoosenUserFilterValue.equals(UserOneStatus.INACTIVE.getId() + "")) {
            selecedUserFilter = new UserFilter(UserOneStatus.class,
                    String.valueOf(UserOneStatus.INACTIVE.getId()),
                    UserOneStatus.INACTIVE.getUserStatus(), String.valueOf(UUID.randomUUID()));
        } else if (ChoosenUserFilterValue.equals(UserTwoStatus.REVOKED.getId() + "")) {
            selecedUserFilter = new UserFilter(UserTwoStatus.class,
                    String.valueOf(UserTwoStatus.REVOKED.getId()),
                    UserTwoStatus.REVOKED.getLoginStatus(), String.valueOf(UUID.randomUUID()));
        } else if (ChoosenUserFilterValue.equals(UserThreeType .ADMIN.getId() + "")) {
            selecedUserFilter = new UserFilter(Some.class,
                    String.valueOf(UserThreeType.ADMIN.getId()),
                    UserThreeType.ADMIN.getName(), String.valueOf(UUID.randomUUID()));
        } else if (ChoosenUserFilterValue.equals(UserFourType .SSO_TEMPLATE.getId() + "")) {
            selecedUserFilter = new UserFilter(Some.class,
                    String.valueOf(UserFourType.SSO_TEMPLATE.getId()),
                    UserFourType.TEMPLATE.getName(), String.valueOf(UUID.randomUUID()));
        }

我重構了一點點,但是我無法獲得與上層代碼相同的結果

重構后的代碼如下

Map<String,Class<?>> map = new HashMap<String, Class<?>>();
map.put(UserOneStatus.REQUESTED.getId()+"", UserOneStatus.class);
map.put(UserOneStatus.ACTIVE.getId()+"", UserOneStatus.class);
map.put(UserOneStatus.INACTIVE.getId()+"", UserOneStatus.class);
map.put(UserTwoStatus.REVOKED.getId()+"", UserTwoStatus.class);
map.put(UserThreeType.ADMIN.getId()+"", Some.class);
map.put(UserFourType.TEMPLATE.getId()+"", Some.class);

String key ="";

if(map.containsKey(ChoosenUserFilterValue)){
    Class<?> getSelectedUserFilterValueClass = map.get(selectedUserFilterValue);

     for (Entry<String, Class<?>> entry : map.entrySet()) {
                key = entry.getKey();
        }

    selecedUserFilter = new UserFilter(getSelectedUserFilterValueClass, key , getSelectedUserFilterValueClass.toString(), String.valueOf(UUID.randomUUID());
}

任何建議表示贊賞

謝謝

應該使用工廠方法設計模式或抽象工廠模式解決基於某種輸入數據(例如id,數字等)創建一個接口/抽象類的對象的問題。 您的代碼是一種工廠方法,在這種情況下使用if / else語句非常好。 在這里,您可以查看工廠方法的示例以及抽象工廠

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM