在这种情况下如何避免类型检查参数

问题描述

我想实现一个基本的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 ...
}

是否有任何设计模式可以解决此问题?

设计模式不会强制执行此类规则,并且通常也不会限制多态性。