2011-01-28 8 views
0

Java에서 작업중인 어플리케이션 중 하나에 대해 다음 요구 사항이 있습니다.주어진 스펙을 가진 팩토리 클래스

AB 클래스의 객체를 생성하는 create(int src) 메소드를 갖는 공장 클래스 C가 있어야합니다.

src=1 인 경우 메서드는 A 클래스의 개체를 만듭니다. B의 객체입니다 (src=2 인 경우). C 이외의 다른 클래스는 AB의 개체를 만들 수 없습니다.

리플렉션을 사용할 수 없습니다.

이것은 지금까지 시도한 것입니다.

class C{ 

private int src; 

public c(){ 
    …//Default constructor 
} 

public create (int src){ 

if(src = 1){ 
    A aobj = new A(); 
} 
else if (src=2){ 
B bobj = new B(); 
} 

} 

} 

클래스 정의를 개선하여 원본 사양과 더욱 일관성을 유지하려면 어떻게해야합니까?

감사합니다.

답변

1

팩토리 클래스 (난 당신이 마음에 Abstract factory patten이 있다고 가정)를 정의하는 올바른 방법은 인터페이스를 구현하는 것입니다 : 사용

public interface IAbstract { } 
public class A implements IAbstract { } 
public class C implements IAbstract { } 

// The factory interface that creates concrete implementations of IAbstract. 
public interface IAbstractFactory { 
    public IAbstract create(); 
} 

public class AFactory implements IAbstractFactory { 
    public IAbstract create() { 
     return new A(); 
    } 
} 

public class BFactory implements IAbstractFactory { 
    public IAbstract create() { 
     return new B(); 
    } 
} 

공장 구현은 일부 응용 프로그램 구성에 따라 선택됩니다. 그 말은, 당신이 당신의 팩토리 클래스에서이 조건이 코드에서 더 높은 레벨로 이동합니다 :

public static void main(String args[]) { 
    int src = Integer.parseInt(args[0]); 
    IAbstractFactory factory = null; 
    if (src == 1) 
     factory = new AFactory(); 
    else if (src == 2) 
     factory = new BFactory(); 
    IAbstract obj = factory.create(); 
    // .... 
} 
+0

당신은 누락 '공용 클래스 B는 구현 IAbstract() {}'? – Pritish

관련 문제