问题描述
我想实现一个基本的Graph结构,以后可以扩展到更特定类型的Graph(对话,行为...),每个图形还需要从Node基类派生的特定类型的节点。 /> 我的Graph基类现在看起来像这样
public abstract class Graph {
private Dictionary<Node,List<Node>> adjList;
public abstract void AddNode(Node node);
public abstract void RemoveNode(Node node);
public abstract void AddEdge(Node node,Node destNode);
public abstract void RemoveEdge(Node node,Node destNode);
}
我的问题是我必须在这些方法的实现中进行类型检查,以防止用户将DialogueNode添加到QuestGraph。是否有任何设计模式可以解决此问题?还是我应该没有基类并且多次编写一些代码?
解决方法
我的问题是我必须在实施中进行类型检查 防止用户添加例如 DialogueNode到QuestGraph。
您可以定义一个抽象的通用类,并为每个实现指定一个特定的Node子类型。
例如在Java中:
public abstract class Graph<T extends Node> {
private Dictionary<T,List<T>> adjList;
public abstract void AddNode(T node);
public abstract void RemoveNode(T node);
public abstract void AddEdge(T node,T destNode);
public abstract void RemoveEdge(T node,T destNode);
}
QuestGraph
子类可能类似于:
public class QuestGraph extends Graph<QuestNode> {
public void AddNode(QuestNode node){...}
public void RemoveNode(QuestNode node){...}
// And so for ...
}
是否有任何设计模式可以解决此问题?
设计模式不会强制执行此类规则,并且通常也不会限制多态性。