fil*_*fku 6 java language-agnostic oop
这是我一直遇到的设计问题,所以我想我最终会把它放在那里,看看人们会如何接近它.问题如下:
我确定了一个特定的类,它在很大程度上描述了我将使用的所有对象实例,包括行为和数据.这很棒,适用于基本对象.然后会出现一些其他类型的对象需要相同的数据和行为,但另外还希望在这里和那里有一个额外的字段,或者额外的数据结构.
让我们称之为Something:
public class Something {
private int id;
private String fieldA;
private String fieldB;
private List<Data> list;
// Then we have getters, setters, and some base methods
}
Run Code Online (Sandbox Code Playgroud)
有时我们需要使用SomethingElse和SomethingDifferent.他们90%喜欢Something,因为相同的数据和行为描述了它们,但是它们每个还有额外的字段需要由程序的其余部分使用:
public class SomethingElse extends Something {
private String dataSpecificToSomethingElse;
// Then we have getters, setters, and some new-data specific methods
}
public class SomethingDifferentextends Something {
private List<DifferentData> dataSpecificToSomethingDifferent;
// Then we have getters, setters, and some new-data specific methods
}
Run Code Online (Sandbox Code Playgroud)
我想以一种通用的OO方式提出一种处理Something系列对象的好方法,因为我不想将我的应用程序的其余部分与具体的实现细节结合起来(因为我们可能需要稍后添加SomethingWacky) .我不想直接处理子类,因为它打破了多态性,并且可能包括需要向下转换/做一个类型切换 - 哎呀.
我能想到解决这个问题的方法如下:
我在前一个项目中使用过1 - 但是在那个例子中,即使每个子类只实现/覆盖它关心的方法,操作实际上也足够通用,因此一个类可以连贯地实现全部或仅一些.
每种方法在某种程度上都很脏,我真的不喜欢任何方法.我有什么选择?也许我完全滥用继承或完全以错误的方式接近这一点.我愿意接受任何建议,并希望利用面向对象技术来提出更清晰,分离的设计.我真的很想知道人们如何解决这样的问题,你可以引用我的任何资源都会非常感激.
谢谢