java - 没有参数的更改器(mutator)

标签 java design-patterns

public void doThings1(){
    this.doSomething();
    this.doSomethingElse();
    this.doThirdThing();
}

public void doThings2(){
    this.doSomethingElse();
    this.doThirdThing();
}

这感觉像是一个非常基本的问题,但是 0 参数更改器(mutator)是否会令人皱眉?我觉得我很少看到对象中的方法能够以预定义的方式直接操作一个或多个对象的参数。也许(如上所示)您需要以不同的顺序执行一些可重复的代码部分,因此为每个场景创建封装更细粒度方法的方法?如果这被认为是不好的,那么更好的方法是什么,如果不是,为什么我从来没有看到它完成?

另一个例子可能是(不完整)

public class TenGreenBottles{
    public void knockOneDown(){
        bottles--;
        round++;
   }
}

这会更改对象状态,暴露给用户,并且不带任何参数。这是允许的吗?这种方法是否有一个名称,该方法在更改状态且不带任何参数的实例上执行设定任务?

谢谢

最佳答案

对我来说,这很大程度上取决于选择能够清楚传达突变概念的好名字。命名是编程中最难的问题之一。

我可以理解一些无参数的更改器(mutator),例如

collection.sort();
collection.removeAll();
condition.invert();
editorState.undoLastAction();
textWriter.newLine();

另一方面,doSomething() 对我来说是一个令人困惑的更改器(mutator)名称:它表明预期会产生副作用,但没有描述内部更改(如果有)。

关于java - 没有参数的更改器(mutator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569874/

相关文章:

c++ - 高效地创建大量需要访问 "global"对象的小型 C++ 对象

java - 基于底层实现的输出对象

c# - ViewModel 的版本控制

java - 具有数组约束参数的 Bean 验证消息插值用作消息中的变量

java - 如何通过Intent发送Object的ArrayList?

java - 当我调整大小时,JPanel 大小问题

java - 如何将字段名称应用于 ArrayList,然后向该 ArrayList 添加内容

java - Bash 忽略 Java 应用程序的退出

c++ - 当应用程序想知道它获得了哪个具体类时使用的设计模式

iOS:类如何向 UI View 通知某些内容?