如何创建一个新的 class 来处理 Java 中的另外两个 class?
How do I create a new class to process two other classes in Java?
我有两个 class 叫做 "J48Tree" 和 "RandomTree"。它们都是 "AbstractTree" 的子class。
"J48Tree"和"RandomTree"有一个叫做"graph()"的方法,"AbstractTree"的其他子class没有这个方法。
上面这些classese和graph()方法来自exsitingAPI。所以我不需要重写它们。
现在我想创建一个名为“可视化”的新 class。这个 class 可以接收 "J48Tree" 和 "RandomTree" 作为基因输入数据。然后 运行 他们的 "graph()" 方法。
我试过了
public class Visualization <T super J48Tree>
和
public class Visualization <T extends AbstractTree>
但是没用。
如何解决这个问题?
提前致谢。
你可以看看策略设计模式:
http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
适合你提到的场景,因为行为(方法)需要根据传递的输入对象在运行时决定。
正如 Florian 所说,您想创建一个接口 Graphable
并让 J48Tree
和 RandomTree
实现它。
public interface Graphable {
void graph();
}
public class J48Tree extends AbstractTree implements Graphable {
@Override
public void graph() {
// implementation
}
}
public class RandomTree extends AbstractTree implements Graphable {
@Override
public void graph() {
// implementation
}
}
public class Visualization {
private Graphable graphable;
public void setGraphable(Graphable graphable) {
this.graphable = graphable;
}
public void graph() {
this.graphable.graph();
}
}
然后,您可以通过调用 setGraphable
.
在 Visualization
class 上设置 Graphable
实现
编辑
根据您的评论,我了解到您无法使 J48Tree
和 RandomTree
都实现 Graphable
接口(这是 classes 上唯一的变化必须制作)。在这种情况下,您应该 'wrap' 每个 class 的一个实例到另一个 class,一个实现 Graphable
.
的包装器
public interface Graphable {
void graph();
}
public class J48TreeWrapper implements Graphable {
private final J48Tree j48Tree;
public J48TreeWrapper(J48Tree j48Tree) {
this.j48Tree = j48Tree;
}
@Override
public void graph() {
this.j48Tree.graph();
}
}
public class RandomTreeWrapper implements Graphable {
private final RandomTree randomTree;
public RandomTreeWrapper(RandomTree andomTree) {
this.randomTree = randomTree;
}
@Override
public void graph() {
this.randomTree.graph();
}
}
public class Visualization {
private Graphable graphable;
public void setGraphable(Graphable graphable) {
this.graphable = graphable;
}
public void graph() {
this.graphable.graph();
}
}
现在,您首先必须创建一个 J48TreeWrapper
的实例,该实例 'wraps' 一个 J48Tree
,然后您调用 setGraphable
使用它(与 RandomTreeWrapper
).
public static void main(String[] args) {
J48TreeWrapper wrapper = new J48TreeWrapper(new J48Tree());
Visualization visualization = new Visualization();
visualization.setGraphable(wrapper);
visualization.graph();
}
我有两个 class 叫做 "J48Tree" 和 "RandomTree"。它们都是 "AbstractTree" 的子class。
"J48Tree"和"RandomTree"有一个叫做"graph()"的方法,"AbstractTree"的其他子class没有这个方法。
上面这些classese和graph()方法来自exsitingAPI。所以我不需要重写它们。
现在我想创建一个名为“可视化”的新 class。这个 class 可以接收 "J48Tree" 和 "RandomTree" 作为基因输入数据。然后 运行 他们的 "graph()" 方法。
我试过了
public class Visualization <T super J48Tree>
和
public class Visualization <T extends AbstractTree>
但是没用。
如何解决这个问题?
提前致谢。
你可以看看策略设计模式: http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
适合你提到的场景,因为行为(方法)需要根据传递的输入对象在运行时决定。
正如 Florian 所说,您想创建一个接口 Graphable
并让 J48Tree
和 RandomTree
实现它。
public interface Graphable {
void graph();
}
public class J48Tree extends AbstractTree implements Graphable {
@Override
public void graph() {
// implementation
}
}
public class RandomTree extends AbstractTree implements Graphable {
@Override
public void graph() {
// implementation
}
}
public class Visualization {
private Graphable graphable;
public void setGraphable(Graphable graphable) {
this.graphable = graphable;
}
public void graph() {
this.graphable.graph();
}
}
然后,您可以通过调用 setGraphable
.
Visualization
class 上设置 Graphable
实现
编辑
根据您的评论,我了解到您无法使 J48Tree
和 RandomTree
都实现 Graphable
接口(这是 classes 上唯一的变化必须制作)。在这种情况下,您应该 'wrap' 每个 class 的一个实例到另一个 class,一个实现 Graphable
.
public interface Graphable {
void graph();
}
public class J48TreeWrapper implements Graphable {
private final J48Tree j48Tree;
public J48TreeWrapper(J48Tree j48Tree) {
this.j48Tree = j48Tree;
}
@Override
public void graph() {
this.j48Tree.graph();
}
}
public class RandomTreeWrapper implements Graphable {
private final RandomTree randomTree;
public RandomTreeWrapper(RandomTree andomTree) {
this.randomTree = randomTree;
}
@Override
public void graph() {
this.randomTree.graph();
}
}
public class Visualization {
private Graphable graphable;
public void setGraphable(Graphable graphable) {
this.graphable = graphable;
}
public void graph() {
this.graphable.graph();
}
}
现在,您首先必须创建一个 J48TreeWrapper
的实例,该实例 'wraps' 一个 J48Tree
,然后您调用 setGraphable
使用它(与 RandomTreeWrapper
).
public static void main(String[] args) {
J48TreeWrapper wrapper = new J48TreeWrapper(new J48Tree());
Visualization visualization = new Visualization();
visualization.setGraphable(wrapper);
visualization.graph();
}