2014-01-28 19 views
-1

我玩弄構圖和抽象的方法和類....如果我有一個動物,貓和狗類在這裏我將如何使用組成動物列表另一個類?animalList使用組合

public class SomeClass{ 

Animal animalList; // ????? 

} 

public abstract class Animal { 


public abstract void sound(); 
} 

public class Cat extends Animal { 


     @Override 
    public void sound() { 

     System.out.println("cat makes sound"); 
    } 
    } 

public class Dog extends Animal { 


    @Override 
public void sound() { 

    System.out.println("dog makes sound"); 
} 
} 
+0

什麼 「動物名錄」 你在說什麼? – Behe

+0

您可能需要更詳細和清晰地解釋您的問題 - 您描述的課程是您發明的課程,因此很難知道您需要什麼。 –

+0

「SomeClass」實際上只是一個動物列表。對於創建的每個動物,SomeClass爲列表中的每個動物執行聲音功能 – Ris

回答

1

如果您嘗試使用複合模式,看起來像這樣。

http://en.wikipedia.org/wiki/Composite_pattern

interface Animal{ 
    void sound(); 
} 

class CompositeAnimal implements Animal { 
    List<Animal> animals; 

    @Override 
    public void sound() { 
     for (Animal animal : animals) { 
      animal.sound(); 
     } 
    } 
} 

class Dog implements Animal { 
    ... 
} 

class Cat implements Animal { 
    ... 
} 
1

我想你想要的是像這樣

public class AnimalList{ 
    private List<Animal> list; 

    public addAnimal(Animal a) 
    { 
     if !(list instanceof List) 
     { 
      list = new List<Animal>(); 
     } 
     list.add(a); 
    } 
    //.. other stuff .. // 

} 

但是我不認爲這是一個真正的組合關係。是的名單是一隻動物。但我更多地將關係看作AnimalList是一個列表。

我認爲一個更好的作文例子是一個類,比如Person類,它有一個寵物動物。

public class Person{ 
    private Animal pet; 
    public void poke_pet() 
    { 
      pet.sound(); 
    } 
} 

Reference