2013-10-21 2 views
0

간단한 디자인 질문이 있습니다. 확장 성 및 객체 지향과 관련하여 다음과 같은 "상황"을 어떻게 설계 할 지 확신하지 못합니다.다른 컨텍스트에서 같은 메서드의 여러 구현 피하기

interface IA { 
    void update(); 
} 

class A implements IA { 
    public void update(){ 
     updateInX(); 
     updateInY(); 
    } 

    private void updateInX(){ 
     ... 
    } 

    private void updateInX(){ 
     ... 
    } 
} 

리던던시 (updateInX(), updateInY())는 좋지 않은 디자인 인 것처럼 보이지만 개선 방법은 없습니다. 도와 주셔서 감사합니다!

+3

당신이 무엇을 요구하고 있는지 분명하지 않습니다. 'updateInX/Y()'를 끊임없이 다시 쓰는 것에 만족하지 않는다는 말입니까? – christopher

+0

@Chris. 정확하게! X와 Y는 예입니다. 나는 A, B, C ... X, Y, Z 등을 가질 수있다. – uccie

답변

2

이 문제는 Template method design pattern을 사용하여 해결할 수 있습니다. 기본적으로 오버라이드되어야하는 추상 메소드를 포함하는 추상 클래스를 정의하고 추상 클래스에 계산 자체를 남겨 둡니다. 예를 들어,

public abstract class Something { 

    public void update(){ 
     updateInX(); 
     updateInY(); 
     printResult(); 
    } 

    private void printResult() { 
     //print 
    } 

    protected abstract void updateInX(); 
    protected abstract void updateInX(); 
} 

이렇게하면 하위 개체가 필요한 메서드 만 구현하고 기본 클래스에 계산을 남겨 둘 수 있습니다.

+0

나는 내일 (템플릿 방법 디자인 패턴) 그것을 시도하고 대답을 받아 들일 것이다. 고맙습니다! – uccie

+0

이것은 아주 좋은 해결책 인 것 같습니다. 잘 했어. +1 – christopher

+0

@Chris : 감사합니다 .-) –

관련 문제