Java,Class对象彼此有不同的方法?

时间:2015-08-20 14:58:31

标签: java language-concepts

这可能看起来像一个奇怪的问题,但我试图练习编写可重复使用的代码,或者至少尝试以正确的方式练习它,如果你知道我的意思吗?我的作业涉及使用几个不同的菜单编写文本界面。因此,有两种方法:(1)每个菜单的类(草率)或(2)包含所有菜单信息的类(不是草率)。

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

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

4 个答案:

答案 0 :(得分:1)

我想我理解你的意思,但我也认为当你说but the methods can be added at another time?时,你的意思是这些方法在其他时间添加的内容

在你的情况下,菜单通常需要处理一些基本的事情,例如

  • 显示实际的菜单文字(让我们称之为标题);
  • 显示工具提示;
  • 点击时执行某些操作。
  • 子菜单项。

要实现这一目标,您可以使用其中之一或两者兼而有之:

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

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

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

    例如,您可以将Menu父类创建为abstract,其中包含TitleTooltip等属性。然后,您可以添加一个名为{{的方法1}}它接受一些对象来处理单击菜单项时发生的事情。最后,您可以创建抽象方法,例如onActionPerformedonBeforeActionPerformed,这实际上是拦截器,它允许您在事件处理之前和之后执行逻辑。

    然后,您可以使用onAfterActionPerformed之类的内容扩展Menu类,以处理不同的方案。

答案 1 :(得分:1)

使用不同的与使用不同的实例相比,您可能会感到困惑。例如,你可以有一个用于菜单的类,但是该类的两个不同的对象,每个菜单一个,每个菜单都有自己的一组数据描述菜单项和它们的作用,因为每个菜的工作方式都相同,但是关于不同的数据。

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

答案 2 :(得分:1)

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

您可以稍后添加'方法'。这可以通过代理或lambda函数来实现。在Java中,当你有按钮并单击监听器(甚至是菜单)时,你可能已经在Swing中遇到了类似的配置。你可以看一下JMenuBar,JMenu,JMenuItem类的用法以及它们的界面可能对你有用。)

当'方法被添加'作为匿名类时,您可能会遇到许多示例,这是在lambda函数到达Java 8之前的

答案 3 :(得分:0)

  

是否可以有一个包含菜单基本组件的类(标题,MenuOptions列表等),但是这些方法可以在其他时间添加?

从基本的“编码”角度来看,您可以创建一个abstract class来声明中心组件(确保它们不在private范围中声明),然后再写一个extend {1}}你的抽象类,你声明你的方法。除非您计划让多个类扩展您的抽象类,否则不需要创建这种分离。

您没有提供足够的整体项目范围,因此我会保留对此的答案。