위키 백과 (http://en.wikipedia.org/wiki/Decorator_pattern)에 표시된 커피 데코레이터 예제를 사용하면 누군가가 데코레이터 만 가지고있는 메소드를 가질 수있는 방법을 어떻게 사용할 수 있습니까? 예 : 우유 데코레이터는 메소드 "fatContent"라고합니다. 이런 유형의 디자인 패턴으로도 가능합니까? 그렇지 않다면 어떤 패턴을 사용하여이 작업을 수행 할 수 있습니까?데코레이터 패턴이 자바로 된 데코레이터 패턴
답변
데코레이터 패턴 정의에 따라 인터페이스에 정의 된 메소드 이외의 메소드를 추가 할 수 없습니다. 사실 언제나 클래스에 메소드를 추가 할 수 있지만 일단이 메소드가 구현 인터페이스에 정의되지 않으면 클라이언트는이 인터페이스를 사용하여 메소드를 호출 할 수 없습니다.
문제의 간단한 해결책은 몇 가지 인터페이스를 정의하는 것입니다. 커피와 우유. 그런 다음 두 인터페이스를 구현하는 클래스 Capuchino
을 정의 할 수 있으며, 아마도 두 인스턴스 인 SimpleCofee
과 FoamedMilk
을 보유 할 수 있습니다. 그러나이 솔루션은 Decorator와 Facade의 조합으로 더 많이 보입니다.
장식자는 여러 가지 특정 방법을 가질 수 있습니다. 장식 된 인터페이스를 구현하는 것 외에도 데코레이터가 구현하는 데코레이터 관련 인터페이스를 소개 할 수 있습니다.
그러나 누군가는 그러한 메소드가 있다는 것을 알아야합니다. 따라서 데코레이터가 메소드를 내부적으로 호출해야하거나 호출자가 데코 레이팅 된 객체 대신 데코레이터를 사용한다는 것을 알아야합니다 (instanceof
을 사용하여 테스트 할 수 있습니다). 그 방법을 확인하십시오.
당신 이을 할 수 있지만, 실제로 전화 방법 (등 더 반사 없다고 가정) 당신이 주위를 통과하고있는 유형과 일치하지 않습니다하는 경우 위하여 유형을 알 필요가 것입니다.
유형은 컴파일 타임에 알려진 결정 : CoffeeDecorater
가하는 CoffeeDecoractor
이 방법은 존재 알고 수신 아무것도 fatContent
서명을 포함하지 않는 경우.
추가 인터페이스를 만들 수도 있지만 인터페이스가 있는지 (instanceof
) 확인하거나 특정 서명 (리플렉션)을 확인하기 위해 클래스를 조사 할 수 있어야합니다.
Java는 컴파일시 메소드가 존재한다는 것을 알고 있거나 런타임에이를 확인합니다.
- 1. 세밀한 데코레이터 패턴
- 2. 구조체 패턴과 데코레이터 패턴
- 3. AS3/Flex 데코레이터 패턴
- 4. 데코레이터 패턴 - 장식
- 5. 유닛 데코레이터 패턴 테스트하기
- 6. 이 컴포지션의 데코레이터 패턴 사용
- 7. 데코레이터 패턴은 슈퍼 안티 패턴
- 8. 엔터티 프레임 워크 데코레이터 패턴
- 9. 데코레이터
- 10. 데코레이터 클래스와 데코레이터 함수의 차이점
- 11. 비용 데코레이터
- 12. 데코레이터 패턴 - 여러 래퍼 또는 수량 속성?
- 13. 중첩 된 파이썬 데코레이터?
- 14. 데코레이터 패턴의 대안
- 15. 상속 대신 컴포지션을 사용하는 데코레이터 패턴
- 16. C++의 시그니처 보존 데코레이터 패턴?
- 17. 이것은 데코레이터 패턴 또는 패턴의 변형입니까?
- 18. permission_required_or_403 데코레이터?
- 19. login_optional 데코레이터?
- 20. ActiveRecord 연결에서 데코레이터 패턴 및 형식 불일치
- 21. 데코레이터 패턴 및 복수 데코레이터가있는 구조 맵
- 22. C# .Net 데코레이터 패턴 변환/설정 모음
- 23. Ruby on Rails 패턴 - 데코레이터 vs 발표자
- 24. 데코레이터 대 기능 확장을위한 전략 패턴
- 25. 모델의 다른 동작을 허용하는 데코레이터 패턴
- 26. 데코레이터 패턴에 상태 추가하기
- 27. 리포지토리 디자인 패턴 및 데코레이터 디자인 패턴 사용
- 28. 데코레이터 패턴을 사용하여 clone() 구현
- 29. Django is_staff 권한 데코레이터
- 30. 데코레이터 사용 방법?
나는 그 디자인 패턴을 몰랐습니다. 솔직히, 나는 그것을 좋아하지 않아. –
@MartijnCourteaux 위키 백과의 커피 예제는 책 [Your Brain On Design Patterns] (http://headfirstlabs.com/books/hfdp/)에서 발췌 한 것입니다. 그러나 그것은 더 이상의 설명없이 단지 작은 부분만을 포함합니다. 패턴에 대한 포괄적 인 견해를 위해이 강좌를 추천합니다. – Beccari
@ MartineCourteaux Decorator ?! 가장 유용한 패턴 중 하나 인 IMO입니다. –