Java 课堂设计问题
目前,我有以下课程设计:Java 课堂设计问题,java,design-patterns,ooad,Java,Design Patterns,Ooad,目前,我有以下课程设计: AnimalHandler(所有动物的基类) 虎汉德勒扩展了AnimalHandler,狮汉德勒扩展了AnimalHandler,豹汉德勒扩展了AnimalHandler等等 虎手、狮手、豹手等都有虎、狮、豹等 现在的问题是:TigerHandler、LionHandler、LeopardHandler等都是相同的(它们有相同的方法等),只是它们分别处理Tiger、Lion、Leopard等类。因此,如果我需要一个名为猎豹的新动物群,我只需要复制任何一个(老虎|狮子|豹
动物类。
然后使用:
public class AnimalHandler<A extends Animal> {
private A animal;
}
使用是一种更好的方法
确保所有动物类(老虎、狮子、豹子)都扩展,比如说动物类。
然后使用:
public class AnimalHandler<A extends Animal> {
private A animal;
}
如果处理程序所做的只是提供类型安全性,而不做其他事情,则可以使用泛型:
public class AnimalHandler<T extends Animal> {
private T theAnimal;
public T getTheAnimal() {}
// Etc
}
公共类AnimalHandler{
私人动物;
公共T getTheAnimal(){}
//等
}
如果处理程序所做的只是提供类型安全,而不做其他事情,则可以使用泛型:
public class AnimalHandler<T extends Animal> {
private T theAnimal;
public T getTheAnimal() {}
// Etc
}
公共类AnimalHandler{
私人动物;
公共T getTheAnimal(){}
//等
}
关于Tiger、Lion和Leopard类在每个处理程序中的使用方式的一些细节
--如果方法接口都相同,只有内部功能不同
--如果在Animalhandler上有扩展,则您正在ChildHandler中执行
然后,您应该使AnimalHandler成为一个抽象类(实现iAnimalHandler),并使用泛型来处理动物(每个Tiger、Lion、Leopard的超类)关于Tiger、Lion、Leopard类如何在每个处理程序中使用的一些细节
--如果方法接口都相同,只有内部功能不同
--如果在Animalhandler上有扩展,则您正在ChildHandler中执行
然后,您应该使AnimalHandler成为一个抽象类(实现iAnimalHandler),并使用泛型来处理动物(每个老虎、狮子、豹子都有一个超类)正如其他人所指出的,泛型是一种很好的方法,或者您可以使用一种策略模式:
class Animalhandler {
List<Animal> animals;
// add, remove and do stuff with animals
}
interface Animal {
void makeSound();
}
class Cat extends Animal {
public void makeSound() {
// meow
}
}
类Animalhandler{
列出动物;
//添加、删除和处理动物
}
界面动物{
void makeSound();
}
猫科动物{
公共空间{
//喵喵
}
}
正如其他人所指出的,泛型是一种很好的方法,或者您可以使用一种策略模式:
class Animalhandler {
List<Animal> animals;
// add, remove and do stuff with animals
}
interface Animal {
void makeSound();
}
class Cat extends Animal {
public void makeSound() {
// meow
}
}
类Animalhandler{
列出动物;
//添加、删除和处理动物
}
界面动物{
void makeSound();
}
猫科动物{
公共空间{
//喵喵
}
}
如您所述,我已经实现了它(使用泛型),并且我还发现使用公共接口也可以很好地工作(没有泛型)。我仍然有一个问题:如果我在web上下文中使用AnimalHandler,并且如果我传递了类似“mysite.com/app.do?animal=tiger”的消息,我必须使用If条件检查我收到的动物值,并创建您提到的相应对象(AnimalHandler tigerHandler=new AnimalHandler();)。所以会有很多if(或if-else)条件。还有什么方法可以避免这种情况吗?我已经实现了您提到的(使用泛型),并且我还发现使用公共接口也可以很好地工作(没有泛型)。我仍然有一个问题:如果我在web上下文中使用AnimalHandler,并且如果我传递了类似“mysite.com/app.do?animal=tiger”的消息,我必须使用If条件检查我收到的动物值,并创建您提到的相应对象(AnimalHandler tigerHandler=new AnimalHandler();)。所以会有很多if(或if-else)条件。有没有办法避免这种情况?