考虑以下类别组织:
interface Restaurant
{
public void dine(Object dish);
}
class ItalianRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with spoon and forks
}
}
class ChineseRestaurant implements Restaurant
{
public void dine(Object dish)
{
// eat with chopsticks
}
}
由于两家餐厅都提供完全不同的菜肴,在界面中代表type
dish
的正确方法(设计方式)是什么?
定义一个Enum列出所有菜肴(意大利语和中文)作为界面的一部分,并将{1}用于type
?< / p>
答案 0 :(得分:4)
您已将Object
类型用于Dish。意思是任何东西都可以被认为是一个菜。
这是否意味着您可以将Phone
或Pen
作为菜品投放?没有;菜是一道菜。为什么不为Dish创建一个抽象?
更好的设计将是:
interface Restaurant
{
void dine(Dish dish);
}
Dish
可以是接口或抽象类;选择一个更合适的。然后,每种菜肴将作为一个单独的类继承/实现Dish
。
答案 1 :(得分:2)
我认为最正确的方法是定义像
这样的通用界面interface Restaurant<T> {
public void dine(T dish);
}
编辑:好吧,我正在思考c#....不知道它是否适合