문제

나는 GOF Java 디자인 패턴을 배우고 있으며 실제 사례를보고 싶습니다. Java의 핵심 라이브러리에서 이러한 디자인 패턴의 좋은 예는 무엇입니까?

도움이 되었습니까?

해결책

많은 디자인 패턴에 대한 개요를 찾을 수 있습니다. 위키 백과. 또한 GOF가 언급 한 패턴도 언급합니다. 여기에 요약하고 Java SE와 Java EE API 모두에서 발견 된 가능한 많은 패턴 구현을 할당하려고합니다.


창조적 패턴

초록 공장 (창조적 방법으로 인식 가능 공장 자체를 반환하여 다른 추상/인터페이스 유형을 만들 수 있습니다)

건축업자 (인스턴스 자체를 반환하는 창조적 방법으로 인식 가능)

공장 방법 (생성 방법으로 인식 가능하고 초록/인터페이스 유형의 구현을 반환합니다)

원기 (창조적 방법으로 인식 가능 a 다른 동일한 속성을 가진 인스턴스)

하나씩 일어나는 것 (창조적 방법으로 인식 할 수 있습니다 같은 인스턴스 (보통 그 자체) 매번)


구조적 패턴

어댑터 (인스턴스를 취하는 창조적 방법으로 인식 할 수 있습니다 다른 초록/인터페이스 유형 및 자체/다른 초록/인터페이스 유형의 구현을 반환합니다. 장식/재정의 주어진 인스턴스)

다리 (인스턴스를 취하는 창조적 방법으로 인식 할 수 있습니다 다른 초록/인터페이스 유형 및 자체 초록/인터페이스 유형의 구현을 반환합니다. 대표/용도 주어진 인스턴스)

  • 아직 아무것도 떠오르지 않습니다. 가상의 예가 될 것입니다 new LinkedHashMap(LinkedHashSet<K>, List<V>) 항목을 복제하지는 않지만 수정할 수없는 링크 된 맵을 반환합니다. 용도 그들을. 그만큼 java.util.Collections#newSetFromMap() 그리고 singletonXXX() 그러나 방법은 가깝습니다.

합성물 (인스턴스를 취하는 행동 방법으로 인식 할 수 있습니다 같은 트리 구조로의 초록/인터페이스 유형)

데코레이터 (인스턴스를 취하는 창조적 방법으로 인식 할 수 있습니다 같은 추가 동작을 추가하는 초록/인터페이스 유형)

정면 (내부적으로 인스턴스를 사용하는 행동 방법으로 인식 가능 다른 독립 초록/인터페이스 유형)

플라이급 (캐시 된 인스턴스를 반환하는 창조적 방법에 의해 인식 가능, 약간의 "multiton"아이디어)

대리 (주어진 초록/인터페이스 유형의 구현을 반환하는 창조적 방법으로 인식 가능합니다. 대표/용도다른 주어진 초록/인터페이스 유형의 구현)


행동 패턴

책임의 사슬 (간접적으로) 동일한 방법을 호출하는 행동 방법으로 인식 가능 또 다른 구현 같은 대기열의 초록/인터페이스 유형)

명령 (Abstract/Interface 유형에서 행동 방법으로 인식 할 수있는 다른 초록/인터페이스 유형 캡슐화 생성 중 명령 구현에 의해)

통역사 (행동 방법으로 인식 가능 a 구조적으로 주어진 인스턴스/유형의 다른 인스턴스/유형; 구문 분석/서식은 패턴의 일부가 아니며 패턴을 결정하고 적용하는 방법).

반복자 (행동 적 방법에 의해 인식 가능 다른 대기열에서 입력)

중재인 (주어진 인스턴스를 위임/사용하는 다른 초록/인터페이스 유형의 인스턴스를 취하는 행동 방법으로 인식 가능)

기념물 (내부적으로 상태를 변경하는 행동 방법으로 인식 가능 전부의 사례)

관찰자 (또는 게시/구독) (인스턴스에서 메소드를 호출하는 행동 방법으로 인식 가능 또 다른 자체 상태에 따라 초록/인터페이스 유형)

상태 (외부에서 제어 할 수있는 인스턴스의 상태에 따라 행동을 변화시키는 행동 방법으로 인식 가능)

전략 (Abstract/Interface 유형에서 행동 방법으로 인식 할 수있는 다른 초록/인터페이스 유형 통과 전략 구현에 대한 방법 인수로서)

템플릿 메소드 (이미 초록 유형으로 정의 된 "기본값"동작이있는 행동 방법으로 인식 가능)

방문객 (2로 인식 가능 다른 각각의 다른 초록/인터페이스 유형; 하나는 실제로 다른 방법을 부르고 다른 하나는 원하는 전략을 실행합니다).

다른 팁

  1. 전체 스윙 전체의 관찰자 패턴 (Observable, Observer)
  2. MVC도 스윙에 있습니다
  3. 어댑터 패턴 : InputStreamReader 및 OutputStreamWriter 참고 : ContainerAdapter, ComponentAdapter, FocusAdapter, KeyAdapter, MouseAdapter ~이다 ~ 아니다 어댑터; 그들은 실제로 널 짝을 이루는 객체입니다. Sun의 불쌍한 이름의 선택.
  4. 데코레이터 패턴 (BufferedInputStream 다음과 같은 다른 스트림을 장식 할 수 있습니다 FilterInputStream)
  5. AWT 툴킷 및 스윙 플러그 가능한 룩앤필 클래스의 추상적 인 패턴
  6. java.lang.Runtime#getRuntime() 싱글 톤입니다
  7. ButtonGroup 중재자 패턴의 경우
  8. Action, AbstractAction 동일한 코드를 실행하기 위해 다른 시각적 표현에 사용될 수 있습니다 -> 명령 패턴
  9. 플라이급 패턴을 위해 jtable의 인턴 된 문자열 또는 셀러 렌더 (또한 다양한 풀 - 스레드 풀, 연결 풀, EJB 객체 풀 - 플라이 웨이트는 실제로 공유 리소스 관리에 관한 것입니다)
  10. Java 1.0 이벤트 모델은 서블릿 필터와 마찬가지로 책임 체인의 예입니다.
  11. 컬렉션 프레임 워크의 반복자 패턴
  12. AWT/스윙의 중첩 컨테이너 복합 패턴 사용
  13. AWT/Swing의 레이아웃 관리자는 전략의 예입니다.

그리고 더 많은 것 같습니다

  1. 플라이급 바이트, 짧은, 정수, 길고 끈의 일부 값과 함께 사용됩니다.
  2. 정면 많은 장소에서 사용되지만 가장 명백한 것은 스크립팅 인터페이스입니다.
  3. 하나씩 일어나는 것 -java.lang.runtime이 떠 오릅니다.
  4. 초록 공장 - 스크립팅 및 JDBC API.
  5. 명령 - TextComponent의 실행 취소/Redo.
  6. 통역사 -regex (java.util.regex.) 및 SQL (java.sql.) API.
  7. 원기 -이 계산 여부는 100% 확실하지 않지만 나는 생각합니다. clone() 이 목적으로 방법을 사용할 수 있습니다.

RMI는 프록시를 기반으로합니다.

GOF의 23 개 패턴의 대부분에 대해 하나를 인용 할 수 있어야합니다.

  1. 초록 공장 : Java.SQL 인터페이스는 드라이버가 등록 될 때 JDBC Jar에서 구체적인 구현을 얻습니다.
  2. 빌더 : java.lang.stringbuilder.
  3. 공장 방법 : XML 공장 등.
  4. 프로토 타입 : 아마도 클론 ()이지만, 내가 그것을 구매하는지 잘 모르겠습니다.
  5. 싱글 톤 : java.lang.system
  6. 어댑터 : java.awt.event의 어댑터 클래스, 예 : Windowadapter.
  7. 다리 : java.util의 컬렉션 클래스. ArrayList에 의해 구현 된 목록.
  8. 복합재 : java.awt. java.awt.component + java.awt.container
  9. 데코레이터 : Java.io 패키지 전체.
  10. 정면: 외부 컨텍스트 쿠키, 세션 범위 및 유사한 작업을 수행하기위한 외관으로 동작합니다.
  11. 플라이급 : 정수, 캐릭터 등
  12. 프록시 : java.rmi 패키지
  13. 책임 체인 : 서블릿 필터
  14. 명령 : 스윙 메뉴 항목
  15. 통역사 : JDK에서는 직접적으로 없지만 Javacc는 확실히 이것을 사용합니다.
  16. 반복자 : java.util.iterator 인터페이스; 그보다 명확 할 수 없습니다.
  17. 중재자 : JMS?
  18. 기념물:
  19. 옵저버 : java.util.observer/observable (그래도 나쁜 일)
  20. 상태:
  21. 전략:
  22. 주형:
  23. 방문객:

23 명 중 10 명에 대한 Java의 사례를 생각할 수는 없지만 내일 더 잘할 수 있는지 알 수 있습니다. 그것이 바로 편집의 것입니다.

추상 공장 패턴은 다양한 장소에서 사용됩니다. 예, DatagramSocketImplFactory, PreferencesFactory. 더 많은 것들이 있습니다.

또한 공장 패턴의 인스턴스도 꽤 많이 있습니다.

내가 이것으로 깨진 시계이지만 Java XML API는 공장을 많이 사용합니다. 나는 이것을 보는 것입니다 :

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);

... 등이.

또한 다양한 버퍼 (StringBuffer, Bytebuffer, StringBuilder)를 사용하여 Builder를 사용하십시오.

java.util.collection#iterator는 공장 방법의 좋은 예입니다. 사용하는 컬렉션의 콘크리트 서브 클래스에 따라 Ierator 구현이 생성됩니다. 공장 슈퍼 클래스 (컬렉션)와 반복기가 모두 인터페이스이므로 때로는 추상적 인 요소와 혼동됩니다. 허용 된 답변 (Balusc)에서 추상적 인 예제의 대부분은 다음과 같은 예입니다. 공장, 원래 GOF 패턴의 일부가 아닌 공장 방법의 단순화 된 버전. Facory에서 공장 클래스 계층 구조가 무너지고 공장은 다른 수단을 사용하여 반환 할 제품을 선택합니다.

  • 초록 공장

추상 공장에는 여러 가지 공장 방법이 있으며 각각 다른 제품을 만듭니다. One Factory에서 생산 된 제품은 함께 사용하기위한 것입니다 (프린터와 카트리지는 동일한 (추상) 공장에서 나온 것입니다). 위의 답변에서 언급 된 바와 같이, 플랫폼마다 다른 AWT GUI 구성 요소의 패밀리는 이에 대한 예입니다 (구현은 GOF에 설명 된 구조와 다르지만).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top