2012-12-17 3 views
0

Session class에는 생성자가없고 대신에 몇 가지 정적 메서드를 사용하십시오. getDefaultInstance (Properties p);JavaMail Session 클래스에 생성자가없는 이유는 무엇입니까?

getDefaultInstance (Properties p, Authenticator a);

getInstance (Properties p);

getInstance (Properties p, Authenticator a);

위의 모든 반환 세션.

디자인 측면에서 볼 때 기본값없는 인수 생성자를 호출하지 않아야합니까? 아니면 생성자를 사용하고 싶지 않거나 사용할 수없는 상황이 더 좋습니까?

+0

자세한 내용은 공장 패턴을보십시오. –

답변

1

생성자를 통해 static 팩토리 메소드의 두 가지 중요한 장점이있다 :

  1. 그들은 대상 클래스의 서브 클래스를 반환 할 수 있습니다.
  2. 매번 새 인스턴스를 만들 필요는 없습니다.

JavaMail은 첫 번째 (실제로 Session이 최종)를 이용하지 않지만 두 번째는 getDefaultInstance에 대해 동일한 Session 객체를 반환하기 위해 사용합니다. 특정 유스 케이스를 지원하기 위해이 작업이 수행되었지만 here과 같이 많은 사람들이 방문하는 것은 좋지 않은 아이디어로 판명되었습니다.

0

여기에서 정보를 얻을 수 있습니다. What are static factory methods?.

Session 클래스의 경우 메서드 이름을 getDefaultInstance 또는 getInstance으로 변경하는 동작을 변경할 수 있다는 이점이 있습니다. 그리고 필요한 경우 인증자를 제공하십시오.

+0

생성자를 사용하여 수행 할 수 있습니다. – Jay

+0

기본적으로 Session(), Session (Authen), Session 프로그래밍 (Prop), Session (Prop, Authen)과 같은 생성자를 사용하여 수행 할 수 있습니다. . – Jay

관련 문제