3

私は、さまざまな動物の種類が Animal インターフェースから同じ talk() メソッドを実装するという問題に取り組んでいます。
メソッドを見るgetAnimal()と、新しい種類の動物がプログラムに追加されると、そのメソッドの内部も変更する必要があることがわかります。
既存のクラスを何も変更せずに、Animal をサブクラス化するだけで新しい動物を追加したいと考えています。
たとえば、動物「犬」を追加すると、基準は「忠実」になります。talk="横糸".
どうすればそれが可能か教えていただけますか? 以下は私のコードです:

interface Animal {

    public void talk();
}

class Lion implements Animal {

    @Override
    public void talk() {
        System.out.println("ROARRRRR");
    }
}

class Mouse implements Animal {

    @Override
    public void talk() {
        System.out.println("SQUEEEEEAK");
    }
}

class Bison implements Animal {

    @Override
    public void talk() {
        System.out.println("BELLOWWWWW");
    }
}

class AnimalType {

    public static Animal getAnimal(String criteria) {

        // I refactor this method
        if (criteria.equals("small")) {
            return new Mouse();
        } else if (criteria.equals("big")) {
            return new Bison();
        } else if (criteria.equals("lazy")) {
            return new Lion();
        }
        return null;
    }
}

public class AnimalExamples {

    public static void main(String[] args) {
        AnimalType.getAnimal("small").talk();
        AnimalType.getAnimal("big").talk();
        AnimalType.getAnimal("lazy").talk();

        //  how to add an animal "Dog" here, criteria="loyal"; talk="woof"
        AnimalType.getAnimal("loyal").talk();

        try {
            AnimalType.getAnimal("small").talk();
        } catch (Exception ex) {
            System.out.println("Animal does not exists");
        }
    }
}

Googleで検索したところ、リフレクションでできることがわかりました。しかし、方法がわからない。もしよろしければ、これを手伝っていただけませんか?前もって感謝します!

4

4 に答える 4