1

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

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

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

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

4

2 回答 2

4

我不熟悉首选项 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;
        }

    }
于 2013-04-23T21:28:21.347 回答
2

通常你会有一个返回新对象的静态工厂方法,然后是该对象的非静态方法,用于自定义对象或返回具有新行为的对象副本。后者更可取,因为这样您的对象可以是不可变的。

对于我认为这是一个很好的例子,请参阅Guava 的 Ordering 类

// yields a natural ordering over some type
// where the largest object comes first (reverse ordering)
Ordering.natural().onResultOf(someFunction).reverse();
于 2013-04-23T21:12:40.853 回答