나는 아래에서 설명하려고하는 디자인 문제로 인해 어려움을 겪었다.생성자를위한 디자인 패턴
클래스를 호출 할 때 A라고하는 매개 변수 집합과 함께 생성자가 있다고 가정합니다. 각 인스턴스화에서 모든 매개 변수를 작성하는 것이 지루하고 더러운 것이므로 다른 클래스를 작성하여 StyleSheetA라고 부르며 모든 매개 변수를 캡슐화하고 A의 생성자에 대한 유일한 매개 변수입니다.이 방법으로 일부 기본값을 준비 할 수 있습니다 StyleSheetA 템플릿은 나중에 사용할 수 있으며 필요할 경우 수정할 수 있습니다.
그리고이 시점에서 나는 A를 확장해야합니다. B가 A를 확장한다고 가정합니다. B는 자체 StyleSheet 즉 StyleSheetB를 갖습니다. StyleSheetB가 StyleSheetA를 확장하는 것이 적절할 것이라고 생각합니다. 따라서 하나의 스타일 시트 매개 변수로 B의 생성자도 수퍼 클래스 A를 구성 할 수 있습니다. 그러나이 디자인에 결함이있을 수 있다는 가능성을 두려워합니다. 예를 들어, 스타일 시트에 getter/setter를 추가하고자한다면 어떻게해야할까요? 이러한 모든 상황을 처리 할 수있는 새로운 방법이 있습니까? 나는 잘못된 길을 가고 있는가? 혼동하는 사람들을 위해, 나는 여기에 몇 가지 코드를 첨부 :
class A
{
StyleSheetA ss;
A(StyleSheetA ss)
{
this.ss = ss;
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetA
{
int n1;
int n2;
// :
// :
int n100;
}
class B extends A
{
B(StyleSheetB ss)
{
super(ss);
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetB extends StyleSheetA
{
int n101;
int n102;
// :
// :
int n200;
}
은 또한 당신의 비판 중 하나가 이해할 수있을 것이다, 어떤 도움이나 제안에 감사드립니다.
편집 : 제네릭 지원이 없도록 자바에서 개발 중입니다.
개발중인 언어는 분명하지 않습니다 (대개 어쨌든). 일반적으로 제네릭/템플릿은이 문제를 해결하는 데 도움이 될 수 있습니다. A 클래스를 A으로 만들면 클래스 B에서 A 을 확장하여 복합 유형 (예 : StyleSheetB)을 지정할 수 있습니다. 이러한 기능이 없다면 C#;을 시도하십시오.) –
그래, 당신의 솔루션은 정말 좋은 접근 방법이 될 것이지만 불행하게도 나는 자바에서 개발하고 있었고 거기에는 일반적인 지원이 없다. 감사. –
java-me 태그를 추가해야합니다. ;) – weltraumpirat