gpt4 book ai didi

java - 应该如何修改这个类才能遵循 DIP(依赖注入(inject)原则)?

转载 作者:行者123 更新时间:2023-12-02 08:02:06 25 4
gpt4 key购买 nike

如何修改此类以遵循 DIP(依赖倒置原则),以便删除构造函数中的两个 ArrayList 依赖项?接口(interface)应该如何?

令我困惑的一件事是新引用指向 ArrayList<type>不仅仅是类的构造函数。我不知道如何处理这种情况......

package mvc.controllers;

import java.util.ArrayList;
import mvc.models.AbstractModel;
import mvc.views.AbstractViewPanel;

public abstract class AbstractController {

private ArrayList<AbstractViewPanel> registeredViews;
private ArrayList<AbstractModel> registeredModels;

public AbstractController() {
registeredViews = new ArrayList<AbstractViewPanel>();
registeredModels = new ArrayList<AbstractModel>();
}

public void addModel(AbstractModel model) {
registeredModels.add(model);
model.addPropertyChangeListener(this);
}

public void removeModel(AbstractModel model) {
registeredModels.remove(model);
model.removePropertyChangeListener(this);
}

public void addView(AbstractViewPanel view) {
registeredViews.add(view);
}

public void removeView(AbstractViewPanel view) {
registeredViews.remove(view);
}
...
}

最佳答案

要以依赖倒置方式执行此操作,您可以执行以下操作之一:

  1. 列表的依赖关系在构造函数中给出:

    public abstract class AbstractController {

    private List<AbstractViewPanel> registeredViews;
    private List<AbstractModel> registeredModels;

    public AbstractController(List<AbstractViewPanel> registeredViews, List<AbstractModel> registeredModels) {
    this.registeredViews = registeredViews;
    this.registeredModels = registeredModels;
    }
  2. 为列表添加修改器(setter):

    public abstract class AbstractController {

    private List<AbstractViewPanel> registeredViews;
    private List<AbstractModel> registeredModels;

    public AbstractController() {
    }

    public void setRegisteredViews(List<AbstractViewPanel> views) {
    this.registeredViews = views;
    }

    public void setRegisteredModels(List<AbstractModel> models) {
    this.registeredModels = models;
    }

顺便说一句,我将 ArrayList 更改为 List。无需引入对 List 实现的依赖。

关于java - 应该如何修改这个类才能遵循 DIP(依赖注入(inject)原则)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755915/

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