这可能看起来像一个奇怪的问题,但我试图练习编写可重复使用的代码,或者至少尝试以正确的方式练习它,如果你知道我的意思吗?我的作业涉及使用几个不同的菜单编写文本界面。因此,有两种方法:(1)每个菜单的类(草率)或(2)包含所有菜单信息的类(不是草率)。
既然我正在写这个,感觉它可能是不好的做法,但是有可能有一个包含菜单基本组件的类(标题,MenuOptions列表等),但方法可以在另一个时间添加?
或者,如果这是不可能/可取的,这通常是做这样的事情的首选方式,(a)单独的菜单,或(b)一个包含所有不同代码的大类菜单?
答案 0 :(得分:1)
我想我理解你的意思,但我也认为当你说but the methods can be added at another time?
时,你的意思是这些方法在其他时间添加的内容。
在你的情况下,菜单通常需要处理一些基本的事情,例如
要实现这一目标,您可以使用其中之一或两者兼而有之:
策略设计模式允许您指定行为,然后将其传递给某个知道如何处理该行为的类。简而言之,您的行为可能是单击菜单项时发生的情况。所以基本上,你的菜单类不知道点击它时该做什么,但它将知道将委托给谁。这种方法可以让你有一个Menu
类和几个可以访问的行为。
使用抽象类与使用设计模式类似,但是,最终会为您想要的每个不同菜单创建一个新的具体类。
因此,我认为最好的结果将介于两者之间。
例如,您可以将Menu
父类创建为abstract
,其中包含Title
,Tooltip
等属性。然后,您可以添加一个名为{{的方法1}}它接受一些对象来处理单击菜单项时发生的事情。最后,您可以创建抽象方法,例如onActionPerformed
和onBeforeActionPerformed
,这实际上是拦截器,它允许您在事件处理之前和之后执行逻辑。
然后,您可以使用onAfterActionPerformed
之类的内容扩展Menu
类,以处理不同的方案。
答案 1 :(得分:1)
使用不同的类与使用不同的实例相比,您可能会感到困惑。例如,你可以有一个用于菜单的类,但是该类的两个不同的对象,每个菜单一个,每个菜单都有自己的一组数据描述菜单项和它们的作用,因为每个菜的工作方式都相同,但是关于不同的数据。
或者,如果菜单的行为不同但有一些共性,您可能希望为公共位定义一个类,然后创建子类,每个子类都包含有关如何将该类菜单分开的详细信息。
答案 2 :(得分:1)
您可以为菜单项和菜单本身(作为菜单项的集合)设置通用类。这些类不包含任何关于点击行为的逻辑,但它们只包括一般部分,如UI,布局,标题占位符 - 一般配置。
您可以稍后添加'方法'。这可以通过代理或lambda函数来实现。在Java中,当你有按钮并单击监听器(甚至是菜单)时,你可能已经在Swing中遇到了类似的配置。你可以看一下JMenuBar,JMenu,JMenuItem类的用法以及它们的界面可能对你有用。)
当'方法被添加'作为匿名类时,您可能会遇到许多示例,这是在lambda函数到达Java 8之前的
答案 3 :(得分:0)
是否可以有一个包含菜单基本组件的类(标题,MenuOptions列表等),但是这些方法可以在其他时间添加?
从基本的“编码”角度来看,您可以创建一个abstract class
来声明中心组件(确保它们不在private
范围中声明),然后再写一个extend
{1}}你的抽象类,你声明你的方法。除非您计划让多个类扩展您的抽象类,否则不需要创建这种分离。
您没有提供足够的整体项目范围,因此我会保留对此的答案。