2015-05-19 51 views
0

我需要做的是對文本,音頻和視頻文件,運行過程中的程序,的Java多態性創建對象

我創建一個接口類和三類繼承它

public interface FileProcess{ 
    public void process();  
} 

public class TextProcess implements FileProcess{ 
    public void process(){System.out.print("Im Text file")}; 
} 

public class VideoProcess implements FileProcess{ 
    public void process(){System.out.print("Im Video file")}; 
} 

public class AudioProcess implements FileProcess{ 
    public void process(){System.out.print("Im Audio file")}; 
} 

我運行測試從發佈請求獲取文件(例如a.jpg或12.txt或aaa.pdf)如何知道要運行的文件進程? 換句話說,我怎麼知道應該創建哪個對象進程?

+1

你的問題完全不清楚,這與多態性有什麼關係。只是因爲你實現了界面? –

+0

你在這裏想要什麼? –

+0

頭文件會告訴你可以用作開關盒的文件類型,以便使用靜態工廠創建適當的對象 –

回答

5

首先注意你的方法是不正確的,一個"丟失:

public class VideoProcess implements FileProcess{ 
    public void process(){System.out.print("Im Video file")}; 
    //             ^here! 
} 

要麼你沒有ImageProcess對象...


這是一個經典Factory Pattern。爲了實現正確的行爲,在這種情況下,你可以創建一個通用對象並檢查擴展來創建具體的實例:

FileProcess process = null; 
String filename = "a.jpg"; 
String extension = filename(0, filename(lastIndexOf("."); 

並用它來選擇創造什麼樣的對象:

switch(extension) { 
    // catch multiple image extensions: 
    case "jpg": 
    case "png": 
     process = new VideoProcess(); 
     break; 

    // catch text 
    case "txt": 
     process = new TextProcess(); 
     break; 

    // catch multiple audio extensions: 
    case "wav": 
    case "mp3": 
     process = new AudioProcess(); 
     break; 

} 

此外,我會高度推薦使用(步驟3)中描述的Factory類,該類返回正確的對象。

+0

謝謝,那是我最初想到的。 –

+0

很高興聽到,如果懷疑鏈接或答案提供讓我知道,鏈接解釋真的很好如何輕鬆創建一個簡單和偉大的工廠模式,將使您的代碼搖滾;) –