让我们想想这个类,ImmutablePart
不可变的纯数据在哪里Object
:
public class Clazz1 {
private final ImmutablePart immu ;
private String f1;
private boolean f2;
private int f3;
/** some constructor building up the immu and
setting the fields to init values
...
...
**/
public ImmutablePart getImmu(){return immu;}
public String getF1(){return f1;}
public boolean getF2(){return f2;}
public int getF3(){return f3;}
public void setF1(String f1){this.f1=f1;}
public void setF2(boolean f2){this.f2=f2;}
public void setF3(int f3){this.f3=f3;}
}
在这个阶段使用组合是一种好习惯,更清楚地表明一个部分是可变的,另一个是不可变的,还是只是样板?像这样(MutablePart
对于 的字段具有 getter 和 setter Clazz1
)。
public class Clazz2 {
private final ImmutablePart immu ;
private final MutablePart mutable;
/** some constructor building up the two final objects
...
...
**/
public ImmutablePart getImmu(){return immu;}
public MutablePart getMutable(){return mutable;}
}
EDIT1:可以更具体地说,不可变部分是从包含某种元信息的文件构建的,因此不打算改变。可变部分将随着运行时间而发展。假设我正在开发一个 p2p 应用程序。不可变部分将包含有关我的客户端将与对等方共享的文件集的所有信息,以及一些哈希键以确保接收到的数据包的真实性。而可变部分将包含有关共享状态的信息,即一些状态、上传的字节数、下载的字节数等......不可变部分可以很容易地称为“元信息”,而可变部分可以称为“上下文”,如果你想要更有意义的名字。但我的问题更多是关于这种设计的实用性。感谢您的回答!
EDIT2:我选择的名称只是出于抽象目的,我会在实际实现中给出更好的名称。也就是说,我同意乍一看可能会令人困惑,说“显式”是指将两个部分严格区分为两个不同的对象,而不是明确命名一个部分“不可变”和另一部分“可变” .