2013-06-21 51 views
1

我有其中i需要使用固定的方法簽名可以接受不同類型的對象的條件。我認爲一種解決方案是使用超類,並讓所有的作爲子類。然而,有沒有什麼好的優雅的設計圖案種類的解決方案,我們解決這個如何包裝不同類型的對象在一個單一的包裝對象

也曾經方法獲取某些類型的對象,我們可以知道實例沒有instanceof檢查類型?請提出 。

+1

沒有足夠的上下文。例如,該方法的簽名是什麼?另外,你並沒有真正使用_method_(或者你在談論一個'Method'實例嗎?),但是一個接口或者抽象類或者... – fge

+1

爲什麼它不夠優雅?你也可以使用一個接口,如果合適的話 – DPM

+0

這些對象有什麼共同點? – UmNyobe

回答

1

你的問題是有點vaque,並可以以兩種不同的方式來解釋:

實施不同的行爲在一個類

讓我們假設你有兩個不同的類別:CatDog。然後,你有一個類Animals,並希望做這樣的事情:

Cat cat = new Cat(); 
Dog dog = new Dog(); 

Animals animals = new Animals(); 
animals.feed(cat); 
animals.feed(dog); 

這裏feed()執行不同的代碼,根據參數類型:

public class Animals { 
    public void feed(Cat cat) { 
     // ... feed the cat 
    } 

    public void feed(Dog dog) { 
     // ... feed the dog 
    } 
} 

這就是所謂的method overloading

實現在不同的班級

另外不同的行爲,你可以定義一個接口Pet它提供了一種方法,讓我們說eat()

public interface Pet { 
    void eat(); 
} 

然後CatDog應實施Pet獲得不同的行爲:

public class Cat implements Pet { 
    public void eat() { 
     //... 
    } 
} 

public class Dog implements Pet { 
    public void eat() { 
     //... 
    } 
} 

然後你Animals類是這樣的:

public class Animals { 
    public void feed(Pet pet) { 
     pet.eat(); 
    } 
} 
+0

謝謝你的例子。我喜歡使用這個只具有多態性的接口 –

1

實現一個接口是一個更好的圖案比inhering一個超類。這樣你的類就保留了它們的單繼承能力。

關於其他問題有關instanceOf,很少有真正需要確定實際對象的類。你總是可以求助於多態。把你需要調用的所有方法放在接口本身的對象中。這樣你永遠不需要知道實際的類型。

+0

感謝這個看起來不錯的辦法。 –

相關問題