java - 接口(interface)是否应该定义特定于实现的枚举值?

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

由于两家餐厅提供完全不同的菜肴,在界面中表示 dishtype 的正确方式(设计方面)是什么?

定义一个列出所有意大利菜和中国菜的枚举作为界面的一部分,并将该枚举用作 dish 的 type 是否是一个好的设计决策?

最佳答案

您已经为菜肴使用了 Object 类型。意思是任何东西在这里都可以被视为一道菜。

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

更好的设计应该是:

interface Restaurant 
{
    void dine(Dish dish);
}

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

关于java - 接口(interface)是否应该定义特定于实现的枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661530/

相关文章:

调用 wait() 时发生 java.lang.IllegalMonitorStateException;在java中

c# - GroupBy 之后的条件选择

java - OOP设计问题

ruby - 从父类(super class)调用子类方法 - 设计模式

java - find()之后如何识别模式名称?

java - instanceof 是否适用于子类异常?

Java Reflection如何实例化类字段类型

c# - 虚拟路径 '/' 映射到另一个应用程序,这是不允许的。 MVC 和 Hangfire

c# - 我应该将 EF 中的实体视为域模型还是 DTO?

java - 使用通用对象的包装器,而不是特定的对象