2012-07-20 7 views
0

예를 들어 WAV 사운드 파일을 나타내는 WAV 클래스가 있습니다. 편의상, 나는 똑같은 기능을 가진 WaveformAudioFile이라는 클래스를 추가해야한다.클래스의 동의어

가능한 디자인/스타일 문제와 관계없이 새로운 클래스를 통합하는 적절한 방법은 무엇입니까? 공통 인터페이스 또는 다른 것을 사용하여 extends (아무 것도 추가하지 않음)를 사용하면됩니까?

편집 : 디자인을 고려한다면 중복 코드를 피할 수있는 대안이있을 것이라고 생각하십니까? 나는 여러 클래스가 있다면 인터페이스 작성이 지루할 것이라고 말합니다. 초기화에 사용할 수있는 일종의 패턴. 속성?

+1

나는 계약을 정의하기 위해 인터페이스를 선호합니다. 나는 보통 "코드 재사용"을 돕기 위해 구현 세부 사항으로 하위 유형을 봅니다. –

답변

2

디자인의 관점에서 볼 때 클래스가 특정 역할을 수행하도록하려면 인터페이스로 이동하십시오.

2 당신이 다음의 더 나은에 다음, 추상 클래스 또는 인터페이스 중 하나에서 그 (것)들을 캡슐화 확장하거나 특정 기능을 지정하는 데 그것을 구현을 변경 계속 행동을하는 경우.

///////////////////// 편집 됨 : /////////////////////

DRY 원리 (직접 반복하지 말 것) 이 원칙에 따라 귀하의 정보와 행동을 지각이 잘되는 곳에 두는 것이 더 좋습니다.

하지만 동일한 기능의 클래스에 따라 동작이 다른 경우에는 어떻게해야합니까? 예를 들어

는 :

클래스 paint() MethodPainting을 고려하십시오.

지금

페인트() 메소드는 그 일의 글라이딩, 음영 등 스타일, 쓰다듬어을 가질 수 있습니다.

그 다음 그 방법을 추상 클래스 또는 인터페이스으로 캡슐화하는 것이 좋습니다.

public interface Paint{ 

paintDoIt(String style); 

} 

아니 귀찮은 일하지만, 약 유연성과 너무 많은 수업을 건드리지 않고하고 코드을 깨지 않고 변경을 할 수있는 능력을 가진 약.

소프트웨어 엔지니어링 상수는 단 하나이며CHANGE입니다.

그래서 우리는 그것을 채택해야합니다.

+0

나는 2 번으로 간다. 템플릿 패턴과 같은 것. 이 질문을 기꺼이 보내 주시면 질문에 추가했습니다. –

+0

자세한 내용은 내 대답을 편집했습니다. 편집 된 부분을 확인하십시오. –

+0

좋아요. 당신이 한 것처럼 누군가가 "그림 물감"을 낼 때 나는 그것을 고맙게 생각합니다. 따라야 할 몇 가지 지침을 제공합니다. –

1

일반적인 interface을 사용하고 두 클래스 모두에서 구현하십시오. 하나의 큰 장점은 당신의 WAVE이고 모든 수업은 다른 수업도 연장 할 수 있습니다.

+0

고마워요. 질문에 더 많이 추가했습니다. –

1

인터페이스는 내 관점에서 볼 때 최상의 솔루션입니다. 이러한 기능을 구현하는 클래스에 대한 공용 인터페이스를 선언하고 직접 클래스 유형 정의 대신이 인터페이스를 사용하십시오. 예를 들어

: ISoundFile이 선언 된 인터페이스입니다

ISoundFile mySoundFile = getSoundFile(); 

.

+1

감사합니다. 나는 질문에 덧붙였다. –

0

누군가가 관심을 가질 수 있도록 추가하는 것입니다. 나는 또 다른 해결책을 생각해 왔고 그것은 단순히 래퍼 클래스를 사용하는 것이다. :).