【问题标题】:Fluent API with "static" class in javajava中带有“静态”类的流利API
【发布时间】:2013-04-23 21:05:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java fluent-interface


    【解决方案1】:

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

    【讨论】:

      【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多