2013-02-09 1 views
0

복잡한 디자인 클래스를 API 디자인의 일부로 설계하고 있습니다. 구성 클래스는 대략 다음과 같습니다 .. (내가 제네릭/액세스 수정 등을 무시)변경 가능한 복합 클래스 설계 및 Java에서의 구현

class Configuration { 
    One obj1; 
    Two obj2; 
} 

class One { 
     List<Double> values; 
} 

class Two { 
     double value; 
     Map<String, Double> data; 
} 

이 내가 성취하고자하는 것입니다 : 나는 사용자가이 설정 클래스를 생성 할 수 있도록하려는

  • 을 처음으로 쉽게 서버에 제출하십시오.
  • 그러면이 클래스의 모든 부분을 변경하고 업데이트 된 구성을 서버에 보낼 수 있습니다.

어떤 디자인 패턴을 사용하고 피해야합니까?

이 클래스를 작성하는 것이 더 좋습니까? 변경 불가능하고 빌더 패턴을 사용합니까? 또는 Configuration 클래스의 모든 수정 방법을 제공하므로 모든 업데이트에 대해 새 Configuration 클래스를 만들지 않고도 동일한 수준의 모든 구성 클래스를 동일한 위치에서 수정할 수 있습니다. 필자는 작성자 패턴이 변경 불가능한 클래스에만 적합하다고 생각합니다.

질문 :

  • 시나리오의 유형에 대한 빌더 패턴을 악용 할 수있는 방법이 있나요?
  • 아니면 위에서 언급 한 것처럼 Configuration 클래스에 뮤 테이타 메소드를 제공하는 것이 더 낫습니까?
  • 다른 유용한 패턴이 있습니까? 당신은지도가 키는 "currentConfiguration"라는 것이다 구성 모든 종류의를 개최 맵을 추가 할 수 있으며 값이로드해야 구성 될 것입니다 코드에 :

답변

0

난 당신이 프로토 타입 패턴을 사용한다고 생각합니다 . 지도에는지도에 저장할 수있는 다른 구성이 포함될 수 있으며 필요한 경우 현재 구성을 대체 할 수 있습니다. 일단 맵에서 구성을 가져 오면 구성 오브젝트를 복제하기 만하면 사용자는 그가 만족 한 것을 할 수 있습니다. 변경 후에 그는 speicifc 이름으로 맵에 구성을 저장할 수 있습니다. 그래서 사용자는 자신이 필요로하는 것과 매우 가까운 구성 객체를 얻을 수 있고 적절하게 구성 할 수 있습니다. 코드는 다음과 같이한다 :`당신은 또한 당신의 구성에 대한 역사를 처리하기 위해 더 많은 코드를 작성할 수 있습니다 공용 클래스 CloudRepository {

private Map<String, Configuration> rep; 

public CloudRepository(Configuration current){ 
    rep = new HashMap<String, Configuration>(); 
    rep.put("current", current); 
} 

public Configuration getConfiguration(String string){ 
    return (Configuration) rep.get(string).clone(); 
} 

public void addConfiguration(String name, Configuration conf){ 
    rep.put(name, conf); 
} 

public void replaceCurrentConfiguration(Configuration conf){ 
    rep.put("current", conf); 
} 

}

합니다. 이 수업을 싱글 톤으로 만들 수도 있습니다.