【发布时间】:2013-04-10 16:31:59
【问题描述】:
我的项目是关于在 java 中实现一个超图
我的 hyperGraph 包含各种类型的 hyperEdge,具体取决于我拥有的顶点类型
顶点类型:图像,标签...
HyperEdge =Homogeneous(相同类型的相关顶点)/Heterogeneous(不同类型的相关顶点)
同构HyperEdge=图像-图像HyperEdge/标签-标签hyperEdge
这是一个快速绘制的UML图
这是我的代码
public interface HomogenousHyperedge< T extends Vertex<L>, L> extends Hyperedge {
public abstract List<T> searchNearstNeighborsVertex(
Hypergraph hypergraph, T vertex);
}
public class ImageImageHyperedge implements
HomogenousHyperedge<ImageVertex, Map<String,Instance>> {
@Override
public List<ImageVertex> searchNearstNeighborsVertex(Hypergraph hypergraph,
ImageVertex vertex) {
return null;
}
}
问题出在 ImageImageHyperEdge 类中我应该知道基于它的特征类型是什么我将搜索 ImageVertex 最近的邻居 我无法将它传递给超级接口的抽象方法,因为 TagTagHyperEdge 类不需要它
如果我用 {featureOneHyperEdge class ,...featureFiveHyperEdge class } 替换 ImageImageHyperEdge 类(我知道特征类型) 这将是重复的代码,因为它是相同的最近邻搜索算法
feature= 图像的低级特征(例如颜色直方图)
我有 5 种低级功能
我将使用每一个来搜索我当前图像的最近邻居
所有功能都存储在一个简单的文本文件中
相同的算法用于搜索最近的邻居
每次只更改文件
【问题讨论】:
-
我不确定我是否正确理解了您的需求,所以这可能是两种方式。你能有一个基类 BaseFeatureHyperEdge 来实现搜索算法。并公开某种模板方法,该方法将被 FeatureOneHyperEdge、FeatureTwoHyperEdge 等覆盖。此模板方法应仅提供搜索所基于的特征类型。希望有帮助吗?
-
@DenisRosca 我得到的第一个想法是使用策略模式,我认为它类似于模板模式,你能解释一下你的想法吗?
-
我想我会添加一个答案
标签: java oop inheritance interface