2014-01-28 2 views
-1

저는 작문과 추상적 인 방법과 수업을 놀고 있습니다 .... 제가 동물, 고양이, 개 수업을 가지고 있다면, 어떻게 작문을 사용하여 동물 목록으로 다른 수업을 만들 수 있습니까 ???animalList using composition

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

복합 패턴을 사용하려는 경우 다음과 같이 표시됩니다.

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

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

나는 당신이 원하는 것은 내가 진정한 구성 관계로이 생각하지 않는다 그러나이

public class AnimalList{ 
    private List<Animal> list; 

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

} 

같은 생각합니다. 네, List HAS A 동물입니다. 그러나 나는 AnimalList가 A List 인 관계를 더 많이 본다.

저는 컴포지션의 더 좋은 예가 애완 동물 인 HAS 클래스와 같은 클래스라고 생각합니다.

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

Reference