我的项目是在Java中实现一个超图在这种情况下如何避免重复代码?
我超图包含不同类型的超边的取决于我有
顶点类型顶点类型:图片,标签...
超边=均匀(涉及相同类型的顶点)/异构(涉及不同类型的顶点)
均相超边=图片图像超边/标签标签超边
氏s是一个快速绘制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类不需要它
,如果我通过更换ImageImageHyperEdge类{featureOneHyperEdge类,... featureFiveHyperEdge类}(其中我知道特征类型) 这将是代码的复制,因为它是相同的最邻近搜索的算法
特征=(图像的低级别特征例如颜色直方图)
我有5型低级别的功能
我将使用每一个搜索最近的ne我目前的图像
所有功能ighbors被放养在一个简单的文本文件
相同的算法来搜索最近的邻居
只有文件被更改每次根据你写“功能是什么
我不确定我是否正确理解你需要什么,所以这可能无论如何。你可以有一个基类BaseFeatureHyperEdge来实现搜索算法。并暴露一些将被FeatureOneHyperEdge,FeatureTwoHyperEdge等覆盖的模板方法。此模板方法应仅提供搜索所基于的功能类型。希望能帮助到你? –
@DenisRosca我得到的第一个想法是使用战略模式 我认为它类似于模板模式 你能解释一下你的想法吗? – nawara
我想我会添加一个答案 –