我经常读到关于降级是一件坏事,现在我需要它,我会问自己在我的例子中有什么替代方案:
我有Interface A
实现接口A的三个类:X1, X2, X3
这些类描述相同的内容,但是使用不同的“格式”和过程(简单地说),这就是为什么我必须将它们分开。
现在我有一个课程如下:
class Test {
A obj;
}
根据“格式”,我会obj = new X1(), obj = new X2() or obj = new X2()
。
从现在开始,在处理对象时(除了A中的方法),我必须在此类中使用大量的向下转换来访问类方法。我看到的唯一选择是为每个可能的类创建一个字段,其中只有一个被使用过。这似乎也很糟糕。
有关如何改善设计的建议吗?
感谢您的帮助。
编辑:这是我的方案(简单地说):
我的主类是某些数据的容器。其中一个是内容属性(有点像HTTP请求的主体)。内容可以是:
对于每种类型,我创建了一个Class(TextContent,FileContent,UnknownContent)。它们实现了具有getBytes()方法的接口内容,该方法将内容作为字节数组返回。
内容的使用:
ContainerClass.setContent(plainText)
- > BaseInterface content = new TextContent(plainText)
ContainerClass.setFile(file)
- > BaseInterface content = new FileContent(file)
ContainerClass.setContent(someBytes)
- > BaseInterface content = new UnknownContent(someBytes)
我的Container对象可以保存到json。内容对象只会保存,如果它是Text或File(因此我无法在界面中实现toJsonObject())。
当内容是文本时,我想检查某些模式。我在容器类之外使用Matcher类(例如((TextContent)container.content).getText()
- >执行此操作;遗憾的是,FileContent没有可以返回的单个文本,因此我也无法实现该文本。我可以在我的容器类中添加一个getContentAs ..()方法,它将适当地转换它,但我觉得我只是解决了潜在的问题:(
答案 0 :(得分:-3)
由于数据相同,听起来你只想要一个类,而不是多个。保持格式与数据分开。