gpt4 book ai didi

java - 我应该如何组织这段代码(OOP,接口(interface))

转载 作者:行者123 更新时间:2023-12-04 06:34:21 26 4
gpt4 key购买 nike

我正在尝试为图表创建结构。到目前为止,我正在尝试弥补我应该如何为边缘创建一些类。

图中的边可以是

常规的,
定向、加权(或上述任何一种)。

那么你认为组织这个类最好的方法是什么,我当时想创建一个接口(interface)IEdge,然后创建类

public interface IEdge{
}

public class DirectedEdge implements IEdge{}
public class WeightedEdge implements IEdge{}

但是现在我遇到了一个问题,它不是很灵活,如果我想要以下怎么办
public class DirectedWeightedEdge implements IEdge{}

你将如何编码?

最佳答案

这不是 OOP 练习——我的意思是,首先使用逻辑,然后查看模式。有向图和无向图是非常不同的野兽。有向边有起点和终点,无向边只有两个节点。为了获得一个共同的基础,您可以将它们称为开始和结束,但是没有方向性这样的东西可以添加到边缘。

同时,边可能有颜色、重量、价格、长度、容量等。你真的要实现ColoredWeightedPricedHavingLenghtCapacityLimitedEdge ?或者你想使用 5 个装饰器?我希望你不要。

我的第一点是“定向性”不适合任何模式。您可以使用属性“isDirected”或其他属性,也许您根本不需要它,因为大多数图形不会混合不同类型的边。所以每个 Graph 的单个属性应该做。很多时候,无向边由一对两个有向边表示。

我的第二点是重量之类的东西一般不应该被强行放在边缘。使用 Map<IEdge, Double>作为 Graph 的属性(property)做得更好。您仍然可以使用 Edge 和 Node 之类的对象,这样可以避免混淆它们(在 C 中很容易发生这种情况,您可能会使用它们的 id s),但将它们的属性保持在外部。

关于java - 我应该如何组织这段代码(OOP,接口(interface)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com