1

我有一个条件,我需要使用可以接受不同类型对象的固定方法签名。我认为一种解决方案是使用一个超类,并让所有作为子类。但是有什么好的优雅的设计模式解决方案可以解决这个问题

同样,一旦方法获得某种类型的对象,我们可以在不检查 instanceof 的情况下知道实例的类型吗?请建议。

4

2 回答 2

1

实现接口是比继承超类更好的模式。这样,您的类就保留了它们的单一继承能力。

关于 的另一个问题instanceOf,很少有真正需要确定对象的实际类别。你总是可以诉诸多态性。将需要调用的所有方法放在接口本身的对象上。这样,您将永远不需要知道实际类型。

于 2013-06-21T12:49:03.503 回答
1

你的问题有点模糊,可以用两种不同的方式解释:

在一个类中实现不同的行为

假设您有两个不同的类: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
    }
}

这称为方法重载

在不同的类中实现不同的行为

另一方面,您可以定义一个Pet提供方法的接口,比如说eat()

public interface Pet {
    void eat();
}

然后应该实施以获得不同的行为CatDogPet

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();
    }
}
于 2013-06-21T12:59:24.347 回答