gpt4 book ai didi

java - getter 和 setter 的替代方案

转载 作者:行者123 更新时间:2023-12-02 03:09:51 27 4
gpt4 key购买 nike

我有一个 MVC 结构,我在 JPanel 类中设置 JPanel 的颜色。我想知道这两种选择中哪一种是最好的解决方案。

  1. 通过将带有 getter 的方法转发给 Panel 类来设置 Controller 类中的颜色
  2. 使用 setter 在 Panel 类中设置颜色,如替代方案 2 所示。

替代方案 2 对我来说听起来是一个更好的解决方案,但不知道是否有很大差异,因为两者都有效,所以如果是这样,为什么?

非常感谢!

<小时/>

替代方案 1:

Controller 类

在运行线程中:

theView.getPanelClass().getPanel().setBackground(new Color(255));

查看类(class)

private final PanelClass panel = new PanelClass();

public PanelClass getPanelClass() {
return panel;
}

面板类(在 View 中声明)

JPanel thePanel = new JPanel();

public JPanel getPanel() {
return thePanel;
}
<小时/>

替代方案 2:

Controller 类在运行线程中:

theView.setPanel(new Color(255));

查看类(class)

private final PanelClass panel = new PanelClass();

public void setPanel(Color col) {
panel.setThePanel(col);
}

面板类(在 View 中声明)

JPanel thePanel = new JPanel();

public void setThePanel(Color c) {
thePanel.setBackground(c);
}
<小时/>

更新我现在已按如下方式编辑代码,以便 View 类通过 JPanel 类设置颜色。

替代方案 3:

Controller 类在运行线程中:

if(x>y) {    
theView.setPanel(1);
} else {
theView.setPanel(2);
}

查看类(class)

private final PanelClass panel = new PanelClass();

public void setPanel(int n) {
panel.setThePanel(n);
}

面板类(在 View 中声明)

public void setThePanel(int n) {
switch (n) {
case 1:
panelS1.setBackground(new Color(255));
break;
case 2:
panelS1.setBackground(new Color(0));
break;
}
}

最佳答案

这是一个契约(Contract)决定。如果您同意开发人员有责任了解 View 的内部结构,并且在设置之前了解 getPanelClass()getPanel() 是可以接受的背景颜色,那么这个方案(1)是可行的。

如果您认为期望程序员了解实现细节是一种滥用行为,那么您最好选择 (2)。

现在,这可能是有原因的,但是为什么要从 Controller 设置颜色?无论如何,这不应该是纯粹由观点本身做出的决定吗?将 View 与 Controller 分离的全部目的正是为了不干扰此类决策。如果您决定在 x 年后使用另一个组件更新 View ,您确定它也会有背景颜色 setter 吗?如果是这样,请确保您当前的 View 实现了“ViewWithBackgroundColorSetter”接口(interface)。

你看,我扩展了一点,但你的问题比你想象的更深入。

关于java - getter 和 setter 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208888/

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