我有一个“静态”类(即一个带有私有构造函数且只有静态成员和函数的类)。它包含了Androids的SharedPreferences
编辑器,它具有相当不错的流畅API。
我想知道是否可以使用这个静态类包装器创建类似的流畅API?
问题在于,通常在制作流畅的API时,所有功能都会return this;
。那个(据我所知)在“静态”类设计中是不可能的。这个问题有某种解决方法吗?
显然,这可以使用单例模式解决,但我正在寻找其他解决方案,最好是需要尽可能少的样板代码的解决方案。
答案 0 :(得分:3)
我不熟悉首选项API,但制作一个静态访问的流畅API非常简单。
例如,要使用Preferences.set().background(green).border(yellow);
之类的内容,您可以执行以下操作:
public class Preferences {
private Preferences(){}
public static Preferences set() {
return new Preferences();
}
public Preferences background(Color color) {
//set color on real preferences
return this;
}
public Preferences border(Color color) {
//set color on real preferences
return this;
}
}
答案 1 :(得分:2)
通常,您将拥有一个返回新对象的静态工厂方法,然后是该对象的非静态方法,用于自定义对象或返回具有新行为的对象的副本。后者是首选,因为那时你的对象可以是不可变的。
我认为这是一个很好的例子,请参阅Guava's Ordering class:
// yields a natural ordering over some type
// where the largest object comes first (reverse ordering)
Ordering.natural().onResultOf(someFunction).reverse();