我有其中i需要使用固定的方法簽名可以接受不同類型的對象的條件。我認爲一種解決方案是使用超類,並讓所有的作爲子類。然而,有沒有什麼好的優雅的設計圖案種類的解決方案,我們解決這個如何包裝不同類型的對象在一個單一的包裝對象
也曾經方法獲取某些類型的對象,我們可以知道實例沒有instanceof檢查類型?請提出 。
我有其中i需要使用固定的方法簽名可以接受不同類型的對象的條件。我認爲一種解決方案是使用超類,並讓所有的作爲子類。然而,有沒有什麼好的優雅的設計圖案種類的解決方案,我們解決這個如何包裝不同類型的對象在一個單一的包裝對象
也曾經方法獲取某些類型的對象,我們可以知道實例沒有instanceof檢查類型?請提出 。
你的問題是有點vaque,並可以以兩種不同的方式來解釋:
實施不同的行爲在一個類
讓我們假設你有兩個不同的類別:Cat
和Dog
。然後,你有一個類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();
}
然後Cat
和Dog
應實施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();
}
}
謝謝你的例子。我喜歡使用這個只具有多態性的接口 –
實現一個接口是一個更好的圖案比inhering一個超類。這樣你的類就保留了它們的單繼承能力。
關於其他問題有關instanceOf
,很少有真正需要確定實際對象的類。你總是可以求助於多態。把你需要調用的所有方法放在接口本身的對象中。這樣你永遠不需要知道實際的類型。
感謝這個看起來不錯的辦法。 –
沒有足夠的上下文。例如,該方法的簽名是什麼?另外,你並沒有真正使用_method_(或者你在談論一個'Method'實例嗎?),但是一個接口或者抽象類或者... – fge
爲什麼它不夠優雅?你也可以使用一個接口,如果合適的話 – DPM
這些對象有什麼共同點? – UmNyobe