programing

Java 핵심 라이브러리의 GoF 설계 패턴 예시

bestcode 2022. 8. 16. 23:22
반응형

Java 핵심 라이브러리의 GoF 설계 패턴 예시

저는 GoF Java Design Patterns를 배우고 있는데, 그 실제 사례를 보고 싶습니다.Java의 핵심 라이브러리에서 이러한 디자인 패턴의 좋은 예는 무엇입니까?

위키피디아에서 많은 디자인 패턴의 개요를 찾을 수 있습니다.또한 GoF에 의해 언급되는 패턴도 기재되어 있습니다.여기에 그것들을 정리하고 Java SE와 Java EE API에 있는 가능한 많은 패턴 구현을 할당해 보겠습니다.


크레디셔널 패턴

추상 공장 (또 다른 추상/인터페이스 타입을 작성하기 위해 사용할 수 있는 공장 자체를 반환하는 크레디셔널 메서드에 의해 수정 가능)

빌더 (인스턴스 자체를 반환하는 크레이제이션 방식으로 수정 가능)

공장법 (개요/인터페이스 타입의 실장을 되돌리는 크레디셔널 메서드에 의해 수정 가능)

시제품 (동일한 속성을 가진 다른 인스턴스를 반환하는 크레디셔널 방법에 의해 수정 가능)

싱글턴 (매회 같은 인스턴스(통상 그 자체)를 반환하는 크레디셔널 방법에 의해 조정 가능)


구조 패턴

어댑터 (다른 추상/인터페이스 타입의 인스턴스를 취하여 특정 인스턴스를 장식/장식하는 자체/다른 추상/인터페이스 타입의 구현을 반환하는 크레디셔널메서드에 의해 수정 가능)

다리 (다른 추상/인터페이스 타입의 인스턴스를 취하여 특정 인스턴스를 위임/사용하는 자체 추상/인터페이스 타입의 구현을 반환하는 크레디셔널 메서드에 의해 수정 가능)

  • 아직 아무것도 생각나지 않는다.가상적인 예로는 다음과 같습니다.new LinkedHashMap(LinkedHashSet<K>, List<V>)항목을 복제하지 않고 사용하는 수정할 수 없는 링크 맵을 반환합니다.단, 및 방법은 비슷합니다.

컴포지트 (동일한 추상/인터페이스 타입의 인스턴스를 트리 구조로 하는 동작 메서드에 의해 수정 가능)

데코레이터 (동일한 추상/인터페이스 타입의 인스턴스를 사용하여 추가 동작을 추가하는 크레이제이션 메서드에 의해 조정 가능)

전면 (서로 다른 독립된 추상/인터페이스 타입의 인스턴스를 내부적으로 사용하는 동작 메서드에 의해 조정 가능)

플라이급 (캐시된 인스턴스를 반환하는 creational 메서드에 의해 수정 가능, 약간의 "instance" 아이디어)

프록시 (소정의 추상/인터페이스 타입의 실장을 반환하고, 다음으로 소정의 추상/인터페이스 타입의 다른 실장을 위임/사용하는 크레디컬메서드에 의해 수정 가능)


행동 패턴

책임계통 (큐내의 같은 추상/인터페이스 타입의 다른 실장에서도 같은 메서드를 (대부분) 호출하는 동작 메서드에 의해 검출 가능)

명령어 (생성 중에 명령어 실장에 의해 캡슐화된 다른 추상/인터페이스 타입의 실장에서의 메서드를 호출하는 추상/인터페이스 타입의 동작 메서드에 의해 해석 가능)

  • 의 모든 구현
  • 의 모든 구현

통역사 (특정 인스턴스/유형의 구조적으로 다른 인스턴스/유형을 반환하는 동작방법에 의해 수정이 가능합니다.파싱/포맷은 패턴의 일부가 아니며 패턴의 판별 및 적용방법에 주의해 주십시오).

반복기 (큐에서 다른 유형의 인스턴스를 순차적으로 반환하는 동작 방법에 의해 수정 가능)

  • 의 모든 실장(다른 실장도 마찬가지입니다.
  • 의 모든 구현

중개자 (특정 인스턴스를 위임/사용하는 다른 추상/인터페이스 타입의 인스턴스(보통 명령어패턴을 사용)를 취하는 동작 메서드에 의해 수정 가능)

기념품 (인스턴스 전체의 상태를 내부적으로 변화시키는 행동 방법에 의해 수정 가능)

  • java.util.Date (세터 메서드는 그렇게 합니다).Date내부적으로는 에 의해 대표된다.long값)
  • 의 모든 구현
  • 의 모든 구현

옵서버(또는 공개/구독) (자신의 상태에 따라 다른 추상/인터페이스 타입의 인스턴스에서 메서드를 호출하는 동작 메서드에 의해 수정 가능)

(외부적으로 제어할 수 있는 인스턴스의 상태에 따라 동작을 변경하는 행동 방법에 의해 조정 가능)

전략. (전략 구현에 메서드 인수로 전달된 다른 추상/인터페이스 유형의 구현에서 메서드를 호출하는 추상/인터페이스 유형의 행동 메서드에 의해 해석 가능)

템플릿 방식 (추상형에서 이미 정의된 "기본" 동작을 가진 행동 메서드에 의해 수정 가능)

  • , 및 의 모든 비추상 메서드.
  • , 및 의 모든 비추상 메서드.
  • javax.servlet.http.HttpServlet, 모든 것doXXX()기본적으로는 메서드는 HTTP 405 "Method Not Allowed" 오류를 응답으로 전송합니다.어느 것도, 어느 것도 실장할 수 없습니다.

방문자 (서로 다른 추상/인터페이스 타입을 취하는 메서드가 정의되어 있는2개의 다른 추상/인터페이스 타입에 의해 실현 가능.한쪽은 실제로 다른 한쪽의 메서드를 호출하고 다른 한쪽은 그 위에서 원하는 전략을 실행합니다.

  1. 스윙 전체에 걸친 관찰자 패턴(Observable,Observer)
  2. MVC도 가동 중
  3. 어댑터 패턴:InputStreamReader 및 OutputStreamWriter 주의:ContainerAdapter,ComponentAdapter,FocusAdapter,KeyAdapter,MouseAdapter어댑터가 아닙니다.실제로 Null 객체입니다.Sun의 잘못된 이름 선택.
  4. 데코레이터 패턴(BufferedInputStream등의 다른 스트림을 장식할 수 있다FilterInputStream)
  5. AWT 툴킷 및 Swing 플러그형 룩앤필 클래스용 AbstractFactory 패턴
  6. java.lang.Runtime#getRuntime() is Singleton
  7. ButtonGroup for Mediator pattern
  8. Action, AbstractAction may be used for different visual representations to execute same code -> Command pattern
  9. Interned Strings or CellRender in JTable for Flyweight Pattern (Also think about various pools - Thread pools, connection pools, EJB object pools - Flyweight is really about management of shared resources)
  10. The Java 1.0 event model is an example of Chain of Responsibility, as are Servlet Filters.
  11. Iterator pattern in Collections Framework
  12. Nested containers in AWT/Swing use the Composite pattern
  13. Layout Managers in AWT/Swing are an example of Strategy

and many more I guess

  1. Flyweight is used with some values of Byte, Short, Integer, Long and String.
  2. Facade is used in many place but the most obvious is Scripting interfaces.
  3. Singleton - java.lang.Runtime comes to mind.
  4. Abstract Factory - Also Scripting and JDBC API.
  5. Command - TextComponent's Undo/Redo.
  6. Interpreter - RegEx (java.util.regex.) and SQL (java.sql.) API.
  7. Prototype - Not 100% sure if this count, but I thinkg clone() method can be used for this purpose.

RMI is based on Proxy.

Should be possible to cite one for most of the 23 patterns in GoF:

  1. Abstract Factory: java.sql interfaces all get their concrete implementations from JDBC JAR when driver is registered.
  2. Builder: java.lang.StringBuilder.
  3. Factory Method: XML factories, among others.
  4. Prototype: Maybe clone(), but I'm not sure I'm buying that.
  5. Singleton: java.lang.System
  6. Adapter: Adapter classes in java.awt.event, e.g., WindowAdapter.
  7. Bridge: Collection classes in java.util. List implemented by ArrayList.
  8. Composite: java.awt. java.awt.Component + java.awt.Container
  9. Decorator: All over the java.io package.
  10. Facade: ExternalContext behaves as a facade for performing cookie, session scope and similar operations.
  11. Flyweight: Integer, Character, etc.
  12. Proxy: java.rmi package
  13. Chain of Responsibility: Servlet filters
  14. Command: Swing menu items
  15. Interpreter: No directly in JDK, but JavaCC certainly uses this.
  16. Iterator: java.util.Iterator interface; can't be clearer than that.
  17. Mediator: JMS?
  18. Memento:
  19. 옵서버: java.util.관찰자/관찰 가능(단, 잘못 실행됨)
  20. 상태:
  21. 전략:
  22. 템플릿:
  23. 방문자:

자바에서 23개 중 10개의 예가 생각나지 않지만 내일 더 잘 할 수 있는지 알아보겠습니다.그게 편집의 목적입니다.

Abstract Factory 패턴은 다양한 장소에서 사용됩니다.예.,DatagramSocketImplFactory,PreferencesFactory그 밖에도 여러 가지가 있습니다.Javadoc에서 이름에 "Factory"라는 단어가 있는 인터페이스를 검색하십시오.

또한 Factory 패턴의 사례도 꽤 있습니다.

이 클럭은 고장났지만 Java XML API는 Factory를 많이 사용합니다.내 말은 이것 좀 봐

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

... 등등.

또한 다양한 버퍼(StringBuffer, ByteBuffer, StringBuilder)에서 Builder를 사용합니다.

java.displaces를 클릭합니다.수집#Iterator는 공장 출하시 방법의 좋은 예입니다.사용하는 컬렉션의 구체적인 하위 클래스에 따라 반복기 구현이 만들어집니다.Factory superclass(Collection)와 Iterator가 모두 인터페이스이기 때문에 Abstract Factory와 혼동될 수 있습니다.승인된 답변(BalusC)의 Abstract Factory 예는 대부분 Factory의 입니다.Factory Method의 간략화된 버전입니다.Factory는 원래 GoF 패턴의 일부가 아닙니다.Facory에서는 Factory 클래스 계층이 축소되고 공장에서는 다른 수단을 사용하여 반품할 제품을 선택합니다.

  • 추상 공장

추상 공장에는 여러 공장 방법이 있으며 각각 다른 제품을 만듭니다.1개의 공장에서 생산되는 제품은, 함께 사용하는 것을 목적으로 하고 있습니다(프린터와 카트리지는 같은(추상) 공장에서 생산되는 것이 좋습니다).위의 답변에서 설명한 바와 같이 플랫폼마다 다른AWT GUI 컴포넌트 패밀리가 그 예입니다(그 실장은 Gof에서 설명한 구조와는 다릅니다).

언급URL : https://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns-in-javas-core-libraries

반응형