Java中,相互之间有不同方法的类对象



这似乎是一个奇怪的问题,但我正在尝试练习编写可重用代码,或者至少尝试练习以正确的方式思考它,如果你明白我的意思吗?我有一个作业,涉及到写一个文本界面与几个不同的菜单。因此有两种方法:(1)为每个菜单创建一个类(草率)或(2)创建一个包含所有菜单信息的类(不草率)。

现在我正在写这篇文章,感觉这可能是不好的做法,但是有可能有一个类包含菜单的基本组件(标题,菜单选项列表等),但方法可以在另一个时间添加?

或者,如果这是不可能的/不可取的,这将是做这样的事情的一般首选方式,(a)单独的类单独的菜单,或(b)一个大的类包含所有的代码不同的菜单?

我想我理解你的意思,但我也认为当你说but the methods can be added at another time?时,你的意思是方法所做的是在另一个时间添加

菜单,在您的情况下,通常需要照顾一些基本的东西,如

  • 显示实际的菜单文本(我们称之为title);
  • 显示工具提示;
  • 点击时正在做某事
  • 子菜单项

要实现这一点,您可以使用或混合使用以下两种方法:

  1. 策略设计模式
  2. 抽象类。

策略设计模式允许你指定一种行为,然后把它传递给某个知道该如何处理该行为的类。简而言之,您的行为可能是单击菜单项时发生的情况。基本上,你的菜单类会知道当它被点击时该做什么,但它会知道调用将被委托给谁。这种方法将允许您拥有一个Menu类和它可以访问的几个行为。

使用抽象类类似于使用设计模式,但是,您最终会为每个您想要拥有的不同菜单创建一个新的具体类。

因此,我认为最好的结果是介于两者之间。

例如,你可以创建你的Menu父类abstract,与属性,如Title, Tooltip等。然后,您可以添加一个名为onActionPerformed的方法,该方法接受一些对象,该对象处理单击菜单项时发生的事情。最后,您可以创建抽象方法,如onBeforeActionPerformedonAfterActionPerformed,这本质上是拦截器,允许您在事件处理之前和之后执行逻辑。

你可以用NonInterceptibleMenu之类的东西来扩展Menu类来处理不同的场景。

您可能会混淆使用不同的与使用一个类的不同实例。例如,你可以有一个用于菜单的类,但这个类的两个不同对象,每个菜单一个,每个都有自己的一组数据来描述菜单项和它们的作用,因为每个都以相同的方式工作,但在不同的数据上。

或者,如果菜单的行为不同,但有一些共性,您可能希望为公共位定义一个类,然后创建子类,每个子类都包含关于如何将这种菜单区分开来的详细信息。

您可以为菜单项和菜单本身(作为菜单项的集合)创建一个通用类。这些类不会包含任何关于点击行为的逻辑,但它们只会涵盖一般部分,如UI,布局,标题占位符-一般配置。

你可以有'以后添加的方法'。这可以通过委托或lambda函数来实现。在Java中,您可能在Swing中遇到过类似的配置,当您有按钮和单击侦听器(甚至菜单)时。你可以看看JMenuBar, JMenu, JMenuItem类的用法,它们的接口可能会让你感兴趣。

你可能遇到过很多匿名类添加方法的例子,这是在Java 8中出现lambda函数之前

是否可能有一个类包含菜单的基本组件(标题,菜单选项列表等),但方法可以在另一个时间添加?

从基本的"编码"角度来看,您可以创建一个abstract class,在这里声明您的中心组件(确保它们不在private范围内声明),然后在extend中编写第二个类,您的抽象类,在这里声明您的方法。除非您计划使用多个类来扩展抽象类,否则实际上并不需要创建这种分离。

你没有提供足够的整体项目范围,所以我将保留我的答案。

相关内容

  • 没有找到相关文章

最新更新