[英]Should the interface define implementation specific enum values?
考虑以下类的组织:
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
}
}
由于两家餐厅都提供完全不同的菜肴,因此在界面中表示dish
type
的正确方法(设计方式)是什么?
定义一个Enum列出所有菜肴 - 意大利语和中文 - 作为界面的一部分,并使用Enum作为dish
type
,这是一个很好的设计决定吗?
你已经使用了Object
类型的Dish。 意思是任何东西都可以被认为是这里的菜。
这是否意味着您可以将Phone
或Pen
作为菜肴? 没有; 菜是一道菜。 为什么不为Dish创建一个抽象?
更好的设计是:
interface Restaurant
{
void dine(Dish dish);
}
Dish
可以是界面或抽象类; 选择一个更合适的。 然后,每种菜肴将作为一个单独的类继承/实现Dish
。
我认为最正确的方法是定义一个通用接口
interface Restaurant<T> {
public void dine(T dish);
}
编辑:好吧,我在思考c#....不知道它是否适合
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.