2013-04-23 1 views
1

"정적"클래스 (즉, 개인 생성자와 정적 멤버 및 함수 만 가진 클래스)가 있습니다. Androids의 SharedPreferences 편집기는 다소 유창한 API를 가지고 있습니다.자바에서 "정적"클래스가있는 유창한 API

이 정적 클래스 래퍼를 사용하여 비슷한 유창한 API를 만들 수 있는지 궁금합니다.

일반적으로 유창한 API를 만들 때 문제는 모든 기능에서 return this;입니다. 그 (내가 아는 한) "정적"클래스 디자인에서는 불가능합니다. 이 문제에 대한 해결 방법이 있습니까?

분명히 이것은 싱글 톤 패턴을 사용하여 해결할 수 있지만 다른 솔루션을 찾고 있습니다. 가능한 한 적은 상용구 코드가 필요한 것이 좋습니다.

답변

2

나는 환경 설정 API에 익숙하지 해요,하지만 당신은 정적에 액세스 유체 API를 만드는 것은 매우 간단하다.

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; 
     } 

    } 
:

는 예를 들어, Preferences.set().background(green).border(yellow); 같은 것을 가지고, 다음을 수행 할 수

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