java 的oo设计_糟糕的OO设计问题 - 我需要Java中的一些通用功能,但不知道如何实现它...

我正在开发一个Java中的小型UML类编辑器,主要是一个个人项目,如果我找到时间在其上创建项目,它可能会在SourceForge上结束。

该项目相当先进:我可以创建类,移动它们,创建界面,创建链接等。

我正在处理的是用于设置类/接口属性和创建新类/接口的对话框。

例如,我有一个扩展JDialog的类。这是编辑类和接口的主要“窗口”(好吧,每个类都有一个类)。它包含一个JTabbedPane,它包含JPanels。

这个JPanel实际上是自定义的。我创建了一个扩展JPanel的抽象类。该类使用组件(由其子类定义)并将它们的值添加到JTable(也包含在JPanel中)。

例如,如果我想编辑一个类的属性,JPanel将包含一个用于输入属性名称的JTextField,以及用于输入其类型的另一个JTextField。还有一组按钮用于处理在这些字段中输入的数据。当我点击“保存”时,我在JTextFields中输入的数据被添加到JTable(àla Enterprise Architect)中。扩展抽象类的具体实现类负责定义控件,并决定当从JTable添加或删除行时对数据做些什么。然而,JTable管理是抽象类的责任。

这是我的问题:在OO中,类有方法,接口也有方法。我告诉自己:我可以使用相同的具体自定义JPanel(AttributesPanel(它扩展了我创建的抽象JPanel类))来存储类或接口的方法。

但是,该类需要保留我正在处理的类或接口的副本(作为属性)。这样,当一个方法被添加到它时,我可以调用editedClass.addMethod()(或editedInterface.addMethod())。问题是,我无法告诉我是否在Class或Interface上工作。

我发现的解决方案很丑陋:在AttributesPanel类中保留属性editedClass和属性editedInterface。根据我是否正在编辑一个类或接口,其中一个属性将为null,而其他属性不会。

如果你问我,这很难看。事实上,我可以听到我的软件工程老师在痛苦中尖叫,而在第九圈地狱中燃烧(实际上是冻结)。

解决这个设计问题的快速方法是创建一个名为“ObjectWithMethods”的接口,我的Class和Interface类将实现这个接口。这样,我只需要在我的AttributesPanel类中放入一个ObjectWithMethods参数。

但这是否意味着我应该创建一个名为“ObjectWithAttributes”或“ObjectWithBlahBlah”的类?我在这里看到一些很好的“TheDailyWTF”的潜力......另外,我不认为我应该修改我的域对象(类,接口,注释,关系(用于我的UML编辑器))或创建一个新的接口一些用户界面的考虑....

你怎么看?

我需要更多的说明(因为我现在非常疲倦,而且在这种心态中,我倾向于非常糟糕地(尤其是英语 - 我的母语是法语)),请问我会编辑这个题。

干杯,

纪尧姆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值