在Java中使用“静态”类的流畅API

时间:2013-04-23 21:05:30

标签: java fluent-interface

我有一个“静态”类(即一个带有私有构造函数且只有静态成员和函数的类)。它包含了Androids的SharedPreferences编辑器,它具有相当不错的流畅API。

我想知道是否可以使用这个静态类包装器创建类似的流畅API?

问题在于,通常在制作流畅的API时,所有功能都会return this;。那个(据我所知)在“静态”类设计中是不可能的。这个问题有某种解决方法吗?

显然,这可以使用单例模式解决,但我正在寻找其他解决方案,最好是需要尽可能少的样板代码的解决方案。

2 个答案:

答案 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();