2017-05-05 42 views
0

我很困惑如何定義以下場景的類和接口層次結構。如何定義類和接口層次結構?

下面是接口

public interface Save { 
    public void save(List<Object> pojoList); 
    public void save(String query); 
} 

public interface Update { 
    public void update(List<Object> pojoList, List<String> conditionList); 
    public void update(String query); 
} 

public interface Delete { 
    public void delete(String query); 
} 

,這裏是類:

Class DbOperations { 
} 

class SaveOperation extends DbOperations implements Save { 
} 

class UpdateOperation extends DbOperations implements Update { 
} 

所以我的擔心是:

  1. 我想打電話SaveOperation,用實例DeleteOpration類方法DbOperations(基類)

  2. 你能告訴我哪個類應該是哪個接口嗎?

  3. 上述層次結構的任何修改?

在此先感謝

+0

可以的,如果你的DbOperations確實有東西要繼承你確認? –

+0

是的,它包含一些受保護的方法,如get db連接,所以我想重用該連接。還有任何與db有關的操作都是Dboepration,所以我決定將Dboperation作爲基類,並且我想使用saveOperation類的方法。 –

回答

0

通過使用多個類實現的接口,您可以定義一個方法,該方法將接口作爲參數並調用其中一個方法,然後該調用的結果將取決於該接口的實際類型在運行時。

這就是說,我沒有看到定義接口DbOperation沒有任何優勢,它沒有定義它的類將繼承的任何方法。

如果您有理由這麼做(有可能,如果您編寫的代碼僅僅是您場景的簡化),從語義角度來看,我認爲DbOperations作爲層次結構的根接口會更有意義,和Save,實際的類和根之間UpdateDelete抽象類(或接口):

public interface DbOperation { 
    public String thisOperation(); 
} 

public abstract class Save implements DbOperation { 
    public String thisOperation(){ 
     return "Save"; 
    } 

    public void save(List<Object> pojoList); 
    public void save(String query); 
} 

public abstract class Update implements DbOperation{ 
    public String thisOperation(){ 
     return "Update"; 
    } 

    public void update(List<Object> pojoList, List<String> conditionList); 
    public void update(String query); 
} 

public abstract class Delete implements DbOperation { 
    public String thisOperation(){ 
     return "Delete"; 
    } 

    public void delete(String query); 
} 

class SaveOperation implements Save { 
} 

class UpdateOperation implements Update { 
} 
+0

你如何認爲他的Db​​Operations沒有方法繼承? –

+0

@pulp_fiction由於OP沒有寫入任何內容。我還指出,如果有,並且該代碼只是實際的代碼的簡化版本,我只是稍作修改。 –

+0

這可能很好,「不想公開私有/私有API」的東西。我的意思是,出於某種原因它是基類。 –

0

所以,關於你的關心,

我想打電話SaveOperation,使用DbOperations實例 DeleteOpration類方法(基類)

我想,它會像這樣:

DbOperations op = new SaveOperation(/*Params*/); 

// Check type to cast 
if(op instanceof Save) 
{ 
    // Cast to Save and call method 
    ((Save)op).save(/*Params*/); 
} 

// For delete 
if(op instanceof Delete) 
{ 
    // Cast to Save and call method 
    ((Delete)op).delete(/*Params*/); 
} 

所以,你不需要任何修改。