2013-04-23 3 views
1

У меня есть «статический» класс (т. Е. Класс с частным конструктором и только статические члены и функции). Он обертывает редактор андроидов SharedPreferences, который имеет довольно приятный свободный API.Fluent API со статическим классом в java

Мне было интересно, возможно ли создать аналогичный свободный API, используя эту статическую оболочку класса?

Проблема в том, что обычно при создании свободного API один из return this; во всех функциях. что (насколько я знаю) невозможно в «статическом» классе. Существует ли какое-то обходное решение этой проблемы?

Понятно, что это можно решить с использованием одноэлементного рисунка, но я ищу другие решения, желательно те, которые требуют как можно большего количества шаблонов.

ответ

2

Я не знаком с предпочтениями 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(); 
Смежные вопросы