我有一个 MyClass 类,其成员为 myString
public class MyClass {
private String myString;
//more members, legacy class with 10000 lines
public String getMyString() {
return myString;
}
public void setMyString(String myString) {
this.myString = myString;
}
}
我在另一个包中还有一个类 MyStringHelper,它以某些方式修改字符串,例如
public class MyStringHelper {
public static void modifyMyString(MyClass myClass) {
// do something with myString from myClass
myClass.setMyString("BLABLA");
}
public static void modifyMyStringII(MyClass myClass) {
// do something with myString from myClass
String old = myClass.getMyString();
myClass.setMyString(old + "BLABLA");
}
}
此实现依赖于开发人员仅使用 MyStringHelper 而不是 MyClass::setMyString,这是不可取的。
说到设计模式,解决这个问题的优雅方法是什么?使用代表 myString 的类不是更好的方法吗
public class MyString {
private String myString;
public MyString(Trans trans) {
this.myString = myString;
}
public String getMyString() {
return myString;
}
public void modifyMyString() {
...
}
public void modifyMyStringII() {
...
}
}
抱歉,我想不出更好的标题。我正在开发一个遗留项目,这已经简化了很多。
使用 POO 的最佳解决方案是使用代表字符串的类。
一个对象是:
您的新类负责提供一致的状态,因此最好提供安全的方法来修改字段值。
大多数时候修改其他类实例的内部字段是一种不好的做法。