2016-01-07 52 views
7

考虑班级安排如下:接口是否应该定义实现特定的枚举值?

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 
    } 
} 

由于两个餐厅提供完全不同的套菜,会是怎样的正确方法(设计明智)在界面上表示dishtype

将Enum作为界面的一部分列出所有菜肴(意大利语和中文),将Enum作为type作为dish是否是一个好的设计决定?

+1

为什么不是界面或抽象类'Dish'? – CollinD

+3

它不应该是一个枚举。如果一家泰式餐厅目前供应绿咖喱和红咖喱,然后想添加黄咖喱作为新菜,你真的希望餐厅联系开发商要求将黄咖喱添加到枚举中吗?没有!餐厅应该能够定义新菜,而不需要更改代码。 – Andreas

回答

4

不知道你已使用Object类型的菜。这意味着任何事物都可以被看作是一道菜。

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

更好的设计是:

interface Restaurant 
{ 
    void dine(Dish dish); 
} 

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

2

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

interface Restaurant<T> { 

    public void dine(T dish); 

} 

编辑通用接口:好,我想在C#....如果它适合

相关问题