接口应该定义特定于实现的枚举值吗?

时间:2016-01-07 17:30:37

标签: java c# oop interface

考虑以下类别组织:

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>

2 个答案:

答案 0 :(得分:4)

您已将Object类型用于Dish。意思是任何东西都可以被认为是一个菜。

这是否意味着您可以将PhonePen作为菜品投放?没有;菜是一道菜。为什么不为Dish创建一个抽象?

更好的设计将是:

interface Restaurant 
{
    void dine(Dish dish);
}

Dish可以是接口或抽象类;选择一个更合适的。然后,每种菜肴将作为一个单独的类继承/实现Dish

答案 1 :(得分:2)

我认为最正确的方法是定义像

这样的通用界面
interface Restaurant<T> {

    public void dine(T dish);

}
编辑:好吧,我正在思考c#....不知道它是否适合