2012-05-30 7 views
0

내가 모델을 구축 할디자인 패턴 :

1.Class A_Builder to build A_Model 

Class A_Builder{ 
public A_Model build(arg1){ 
//build A_Model 
} 
} 


2.Class B_Builder to build B_Model 

Class B_Builder{ 
public B_Model build(arg2,arg3){ 
//build B_Model 
} 
} 

3.Class C_Builder to build C_Model 
Class C_Builder{ 
public C_Model build(arg4){ 
//build C_Model 
} 
} 

4.Class D_Builder... 

한 빌더 아래에 내 코드를 리팩토링 할 계획이 같은 코드를 리팩토링, 그래서 나는 그들을 리팩토링 명령 패턴을 사용하는 명령으로 빌드 방법을 계획 (arg1)이고 B는 (arg2, arg3)

또는 이와 같은 코드를 리팩토링하는 아이디어는? 감사합니다.

+0

인수가 다른 –

+0

당신이 따라 여러 모델을 구축 한 빌더를 원하십니까 입력시, 또는 빌더의 공통 코드를 수퍼 클래스로 리팩토링 하시겠습니까? – Jeremy

+0

모든 모델은 빌드 함수에서 다른 수의 인수를 갖습니다. 또는 동일한 서명을 가진 두 빌더 클래스에서 빌드 (..)를 가질 수 있습니까? 모델 클래스가 어떻게 든 관련되어 있습니까 (동일한 수퍼 클래스 등을 가짐)? – dbf

답변

0

사용중인 언어를 지정하지 않았지만 내가 만난 언어 중 대부분은 overloading of functions을 지원합니다.

class Builder { 
    public build(arg) { 
     // Build A Model 
    } 

    public build(arg, arg) { 
     // Build B Model 
    } 

    ... 
} 
:

은 적절한 기능을 같은 이름을 가진 두 개의 별도의 함수를 선언,하지만 서로 다른 인수를 한 후 언어가 함수 호출 할 때 전달하는 매개 변수를 검토하고 실행할 수 있다는 것을 의미한다

함수 인수가 모두 같은 변수 유형 인 경우 매개 변수 배열을 허용하는 단일 함수를 간단히 만들 수 있습니다. 배열은 가변 길이 될 수 있고, 그래서 당신의 단일 기능은 배열의 길이에 따라 다른 작업을 수행 할 수 있습니다 : 방법

class Builder { 
    public build(arg[]) { 
     switch(arg.length) { 
      case 1: 
       // Build A Model 
       break; 
      case 2: 
       // Build B Model 
       break; 
      ... 
     } 
    } 
} 
+0

메서드의 args가 다릅니다 –

+0

@ simon.liu :이 솔루션이 효과가 있습니까? 여기서도 오버로드 된 메소드에는 언급 한 것과 다른 인수 수가 있습니다. 다른'Builder '클래스의 2'build()'메소드가 동일한 서명을 가질 수 있습니까? –

+0

@Jamie : 감사합니다.하지만 과부하는 좋은 생각이 아닙니다. 하나는 A_Model을 빌드하고 다른 하나는 B_Model을 빌드하는 것입니다. C_Builder도 2 개의 인수를 가지고 있기 때문에 매개 변수의 배열을 사용하는 것은 좋지 않습니다. 아마도 D_Builder는 단지 1 개의 인수만을가집니다. –