java - 容器和元素之间触发事件的解决方案?

标签 java oop design-patterns

我有一堂这样的课:

public class Graph {
    Map<NodeKey,Node> nodes;

    List<RelationKey,Relation> relations;

    public void addNode(Node node){
        nodes.put(node.key,node);
    }

    public void addRelation(Relation relationship){
        relations.add(relation.key,relation);
    }

//getter and setter
}
public class Node {
    Map<RelationKey,Relation> relations;

    public void addRelationship(Relation relation){
        relations.put(relation.key,relation);
    }
//getter and setter
}

当调用node.addRelationship(Relationlation)时,Graph如何调用它的方法:addRelation(Relationrelation)。我可以在 Node 类中添加 Graph 属性,但它似乎与 OOP 中的 HAS-A 关系不太接近

最佳答案

您可以像这样使用观察者模式:

class Node extends Observable {

    public Node(Observer observer){
        addObserver(observer);
    }

    public void addRelationship(Relation relation){
        relations.put(relation.key,relation);
        setChanged();
        notifyObservers(relation);
    }
}


class Graph implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        Relation relation = (Observable)arg;
        relations.add(relation.key,relation);
    }
}

关于java - 容器和元素之间触发事件的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41671213/

相关文章:

java - 加密随机 6 位数字 -> 人类可读

c# - 为什么在 MVP 中使用 Presenter 接口(interface)?

java - 在搜索功能中排序

java - Java Process.getOutputStream() 是如何实现的?

java - 用逗号分隔数据

java - edittext 中的输入文本恢复为可扩展 ListView 中的预设文本

c# - 如何通过依赖注入(inject)将有状态服务放入组合根中而没有可怕的副作用?

python - 如何通过python中的属性从对象列表中选择一个对象

oop - 指定要在许多函数结束时执行的操作

c++ - C++单例代码解释