응용 프로그램에 많은 추상 클래스가 있습니까? 많은 추상

우리는 처음에 commmon 인터페이스에서 다양한 메소드 구현으로 전략 패턴을 구현하고자했습니다. 이들은 사용자 입력에 따라 런타임에 선택됩니다.

이 밝혀졌다 있어요, 우리는 발생하는 5 일반적인 방법 – 3를 구현하는 추상 클래스변화하는 구현에 남아 하나의 방법 전략 즉.

업데이트 : 많은 추상 클래스에 따르면 6 개의 다른 고급 기능, 즉 6 패키지가 있으며 각각 Interface + AbstractImpl + (일련의 실제 Impl)이 있습니다.

이것은 어떤 식 으로든 나쁜 디자인입니까?

나중에 확장 성 측면에서 부정적인 견해-노인과의 코드 / 디자인 검토를 준비하고 있습니다.



답변

아니, 이것은 결코 나쁜 디자인이 아닙니다. 그것은의 템플릿 메소드 패턴 .

그것은 알고리즘 단계의 다양한 행동을 캡슐화하기위한 것이며, 아마도 시나리오에서 그렇습니다. 전략 및 템플릿 방법 패턴 은 많은 경우에 강력한 조합만듭니다 . 아마도 추상 전략을 프레임으로 사용하고 구체적인 전략에 템플릿 방법 패턴을 사용하는 것입니다. 꽤 깨끗합니다.

확장 가능하며 코드를 반복 할 필요가 없습니다. 완전히 다른 무언가가 필요할 때 전략 인터페이스를 사용하여 새로운 추상 또는 구체적 전략을 만드십시오.


답변

아닙니다. 세부 사항에 따라 구체적 사례에 대한이 작은 지식으로 더 많은 것을 말하기는 어렵습니다. 추상 기본 클래스에서 일반적인 메소드 구현을 통합하는 것이 좋습니다.

클래스에서 단일 추상 메소드가 사용되는 방식에 따라이 패턴은 전략이 아닌 템플리트 메소드 일 수 있습니다 . 즉, 외부 세계에서 직접 호출하는 것이 아니라 기본 클래스의 다른 최종 메소드에서 호출하는 경우입니다.


답변

템플릿 메소드 패턴은 서브 클래스가 추상 메소드로 특수 코드를 구현하도록하며 서브 클래스는 수퍼 클래스로부터 공통 메소드를 상속합니다. 그래서 나는 이것이 많은 추상 클래스를 가지고 있다고 생각하지 않습니다. 그것은 하나의 추상 클래스 일뿐입니다. 모든 서브 클래스는 인스턴스 클래스입니다.


답변

추상 클래스가 동일한 내용으로 동일한 메소드를 암시하는 경우 왜 여러 추상 클래스가 있습니까?

그들이 방법을 다르게 암시하는 경우 문제가 발생하지 않습니다.

확장 성 사용 인터페이스를 향상시키기 위해 추상 클래스를 폐기하면 문제가되지 않습니다.