많은 공통된 동작을 공유하는 클래스 집합을 만들고 싶습니다. 물론 OOP에서 "서브 클래스가있는 추상 클래스"를 자동으로 생각한다고 생각할 때. 하지만이 클래스에서 수행해야하는 작업 중에는 각각 클래스의 인스턴스에 대한 정적 목록이 있어야합니다. 목록은 클래스 내에서 싱글 톤의 일종으로 작동해야합니다. 나는 각각의 서브 클래스가 싱글 톤을 가지고 있다는 것을 의미한다. "싱글 톤"을 서브 클래스로, 진정한 싱글 톤이 아닙니다. 하지만 정적 인 경우 어떻게 상속받을 수 있습니까? 각 서브 클래스에 대한 목록의싱글 톤 제품군을 만들려면 어떻게해야합니까?
public abstract A
{
static List<A> myList;
public static List getList()
{
if (myList==null)
myList=new ArrayList<A>(10);
return myList;
}
public static A getSomethingFromList()
{
List listInstance=getList();
... do stuff with list ...
}
public int getSomethingFromA()
{
... regular code acting against current instance ...
}
}
public class A1 extends A
{
...
}
public class A2 extends A
{
...
}
A1 somethingfromA1List=(A1) A1.getSomethingFromList();
A2 somethingfromA2List=(A2) A2.getSomethingFromList();
내용은 다를 것이지만, 모든 코드가 같은 것 목록에서 작동하는이 같은
물론 코드가 작동하지 않습니다.
위의 코드의 문제점은 모든 하위 클래스에 대해 하나의 목록 만 가질 수 있다는 것이고 각각에 대해 하나씩 필요하다는 것입니다. 예, 각 하위 클래스에 정적 목록을 선언하는 코드를 복제 할 수 있지만 목록에 추가하고 목록 등을 검색하는 모든 코드를 복제해야합니다. 그러면 서브 클래 싱의 목적을 상실하게됩니다.
코드를 복제하지 않고이를 수행하는 방법에 대한 아이디어가 있으십니까?
업데이트
는 BlueRaja 아마도 다른 사람을 위해 명확하게 제가 할 노력하고있어에 대해 좀 더 구체적으로 보자합니다.
비슷한 동작이 필요한 상태 및 코드가 여러 개 있습니다. 그들은 가능한 모든 코드 상태에 대해 유형 안전 인스턴스를 원한다는 점에서 열거 형과 비슷하지만 여러 세트로되어 있으므로 모든 열거 형을 열거 할 수는 없습니다.
예를 들어, 주문 상태, 배송, 수신 및 일부 특수 값이있는 주문 상태가 있습니다. 상품 대 서비스의 가치가있는 항목 유형이 있습니다. 주문 대비 재고가 있습니다. 기타
그게 전부라면 나는 각각에 대한 열거 형을 만들거야. 그러나 텍스트 값으로 객체를 검색하는 기능과 같이 필요한 다른 동작이 있습니다 (예 : 우리가 데이터베이스에서 그것을 읽을 때; 텍스트 설명으로 모든 선택 사항을 나열한 드롭 다운을 작성합니다. 내가 아는 한 최선을 다해 상속하고 싶은 공통적 인 동작을 가진 코드 집합이 여러 개 있고 열거 형을 서브 클래스로 만들 수 없기 때문에 열거 형으로이 작업을 수행 할 수 없습니다. 모든 코드를 단일 열거 형에 넣으면 특정 코드 유형에 대한 값 목록을 수집 할 준비가되지 않았을뿐만 아니라 한 코드에서 다른 코드로 형식 안전성을 포기하게됩니다.
개체 orietented 세계에서 상태를 보유하고 정적을 사용하지 마십시오. 단지 잘못되었습니다. –
싱글 톤을 사용하지 마십시오. 정적 데이터에 매우주의하십시오. 상속 이상의 구성을 선호합니다. 정말로, 당신이 언급하는 거의 아무것도 "좋은 OOP"가 아닙니다. – jalf
오케이. 그래서 주어진 하위 클래스의 인스턴스 세트가 있고, 검색, 드롭 다운 작성 등에 대한 모든 인스턴스 목록을 유지해야합니다. 좋아요, 목록을 보유하고있는 (정적이 아닌) 객체를 만들 수 있습니다. 그러나 하나의 목록 만 존재하는 것이 타당합니다. 그래서 이점은 무엇입니까? 다른 목록을 가진 두 개의 객체를 만들면 잘못된 것이 있습니다. 싱글 톤없이 어떻게 문제를 해결하겠습니까? – Jay