1.구조 대신 정적 공장 방법 사용 고려(Effective-자바 학습 노트)

한 가지 유형 에 대해 인 스 턴 스 를 얻 으 려 면 일반적인 방법 은 공용 구조 함 수 를 제공 하 는 것 이지 만 다른 방법 도 있다.우 리 는 정적 공장 방법 이 라 고 부 르 는데 실질 적 으로 간단 한 정적 방법 으로 하나의 인 스 턴 스 를 되 돌려 준다.사실 정적 공장 방법 은 대상 의 인 스 턴 스 를 가 져 옵 니 다.우 리 는 낯 설 지 않 습 니 다.API 의 인 스 턴 스 를 살 펴 보 겠 습 니 다.
우선 정적 공장 방법 과 디자인 모델 중의 공장 방법 모델 이 다르다 는 것 을 주의해 야 한다.다음은 Boolean 의 인 스 턴 스 입 니 다.
public final class Boolean implements java.io.Serializable, Comparable{
    
    public static final Boolean TRUE = new Boolean(true);

    public static final Boolean FALSE = new Boolean(false);
    
    public static Boolean valueOf(boolean b) {
        return (b ? TRUE : FALSE);
    }
}

클래스 는 클 라 이언 트 에 게 공공 구조 방법 이 아니 라 정적 공장 방법 을 제공 할 수 있다.하지만 장점 도 있 고 단점 도 있다.
첫 번 째 장점 은 구조 방법 이 아 닌 이름 이 있다 는 것 이다.예 를 들 어 소수 일 수 있 는 BigInteger 의 구조 방법 인 BigInteger(int,int,Random)를 되 돌려 주면 BigInteger.probable Prime 의 정적 공장 방법 이 라 고 명명 할 수 있다.가 독성 을 높이다.
두 번 째 장점 은 구조 방법 과 달리 매번 새로운 대상 을 만 들 필요 가 없다 는 것 이다.이것 은 위 에 있 는 Boolean 의 코드 예 시 를 보면 알 수 있다.
세 번 째 장점 은 구조 방법 과 달리 임의의 유형의 모든 하위 유형의 대상 을 되 돌 릴 수 있다 는 것 이다.
네 번 째 장점 은 되 돌아 오 는 대상 의 종 류 는 입력 매개 변수 에 따라 다 를 수 있다 는 것 이다.
EnumSet 류(항목 36)는 공공 구조 방법 이 없고 정적 공장 만 있 습 니 다.
/**
     * Creates an empty enum set with the specified element type.
     *
     * @param  The class of the elements in the set
     * @param elementType the class object of the element type for this enum
     *     set
     * @return An empty enum set of the specified type.
     * @throws NullPointerException if elementType is null
     */
    public static > EnumSet noneOf(Class elementType) {
        Enum>[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");

        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

다섯 번 째 장점 은 이 방법 을 포함 하 는 클래스 를 작성 할 때 되 돌아 오 는 대상 의 클래스 는 이러한 유연 한 정적 공장 방법 이 존재 하지 않 아 도 된다 는 것 이다.예 를 들 어 자바 데이터베이스 연결 API(JDBC)등 이다.서비스 제공 자 구 조 는 공급 자가 서 비 스 를 실현 하 는 시스템 이 고 시스템 은 클 라 이언 트 를 사용 할 수 있 게 하여 클 라 이언 트 를 실현 에서 분리 시킨다.
정적 공장 방법 만 제공 하 는 주요 제한 은 공공 이나 보호 방법 이 없 는 종 류 는 하위 화 할 수 없다 는 것 이다.
두 번 째 단점 은 프로그래머 가 찾기 가 어렵 다 는 것 이다.하하,두 렵 지 않 냐 고 물 었 다.
다음은 정적 공장 방법의 상용 명칭 입 니 다.
  • from-A 형식 변환 방법 은 하나의 인 자 를 받 아들 이 고 이 유형의 인 스 턴 스 를 되 돌려 줍 니 다.예 를 들 어 Date d=Date.from(instant);
  • of-하나의 취 합 방법 으로 여러 개의 인 자 를 받 아들 이 고 이 유형의 인 스 턴 스 를 되 돌려 줍 니 다.예 를 들 어 Set faceCards=EnumSet.of(JACK,QUEEN,KING);
  • value Of-from 과 to 의 더 자세 한 대체 방식,예 를 들 어 BigInteger prime=BigInteger.value Of(Integer.MAXVALUE); instance 나 getinstance-인자(있 으 면)가 설명 한 인 스 턴 스 를 되 돌려 줍 니 다.그러나 같은 값 을 가지 고 있다 고 할 수 없습니다.예 를 들 어 StackWalker luke=StackWalker.getInstance(options);
  • create 또는 new Instance-instance 나 getInstance 와 유사 합 니 다.이 방법 을 제외 하고 모든 호출 이 새로운 인 스 턴 스 를 되 돌려 줍 니 다.예 를 들 어 Object new Array=Array.new Instance(classObject,array Len);
  • getType-getInstance 와 유사 하지만 공장 방법 이 다른 종류 에서 사용 하면.Type 은 공장 방법 이 되 돌아 오 는 대상 유형 입 니 다.예 를 들 어 FileStore fs=Files.getFileStore(path);
  • new Type-new Instance 와 유사 하지만 공장 방법 이 다른 유형 에서 사용 하면.Type 은 공장 방법 이 되 돌아 오 는 대상 유형 입 니 다.예 를 들 어 Buwered Reader br=Files.newBuwered Reader(path);
  • type-getType 과 new Type 의 간결 한 대체 방식,예 를 들 어 List litany=Collections.list(legacy Litany);

  • 한 마디 로 하면 정태 적 인 공장 방법 과 공공 구조 방법 은 모두 그들의 용도 가 있 고 그들의 상대 적 인 장점 을 이해 하 는 것 이 가치 가 있다.일반적으로 정적 공장 은 더욱 바람 직 하기 때문에 정적 공장 을 고려 하지 않 은 상태 에서 공공 구조 방법 을 제공 하 는 것 을 피한다.
    ps:위 챗 으로 책 을 읽 는 친구 가 있 으 면 위 챗 독서 군 전송 문 으로 조직 을 찾 을 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기