데코레이터 패턴 예제

나는 디자인 시간에 아이스크림장식을 제거하고 디자인 시간에 메이크 크림 방법을 만드는 아이스크림 인터페이스를 구현합니다 허니 데코레이터 와 너티 데코레이터를 직접 디자인 할 수 있습니다. 런타임에 나는 간단한 아이스크림의 개체를 만들고 허니 데코레이터 및 NuttyDecorator 개체 생성자로 전달합니다. 괜찮습니까? 아주 좋은 게시물. 나는이 예제에서 약간의 혼란이 있다. Pankaj 는 프레임 워크를 만드는 여러 디자인 패턴을 사용합니까? 예를 들어 로그인 프레임 워크 정말 당신의 작품을 주셔서 감사합니다. 당신은 작은 예로 아주 잘 설명했다. 데코레이터 패턴을 구현할 때 해당 동작을 확장하여 개체 주위에 래퍼를 생성합니다. 래퍼는 이전 또는 이후에 해당 작업을 수행하며 래핑된 인스턴스에 호출을 위임합니다. 데코레이터 DP와 같이 보이는 것은 여분의 처트니를 얻을 수 없습니다. 당신은 더 많은 알라 또는 처트니를 요청할 수 없습니다.

실제로 처트니는 별도의 클래스가 아니며 dosa 인터페이스에 의존합니다. 다른 DP를 사용해야 합니다. 하지만 당신은 여기에 좋은 질문을 가져왔다. 문제에 대한 답을 알아낼 수 있었습니까? 나는 좋은 예를 많이 검색하고 마침내 그것을 발견했다. 고마워요! 위의 UML 클래스 다이어그램에서 추상 데코레이터 클래스는 참조(구성 요소)를 데코레이팅된 개체(구성 요소)로 유지하고 모든 요청을 전달합니다(component.operation().). 이렇게 하면 데코레이터가 구성 요소의 클라이언트에 투명(보이지 않음)됩니다. 데코레이터는 개체에 동적으로 추가 책임을 부여합니다. 소나무 나 전나무 나무에 추가 되는 장식품 장식의 예입니다.

조명, 화환, 사탕 지팡이, 유리 장식품 등은 나무에 추가하여 축제 분위기에 어우르게 됩니다. 장식은 사용되는 특정 장신구에 관계없이 크리스마스 트리로 인식 할 수있는 나무 자체를 변경하지 않습니다. 추가 기능의 예로, 조명을 추가하면 크리스마스 트리를 „점등”할 수 있습니다. 주어진 예는 데코레이터 디자인 패턴의 구현이다. 아이스크림은 데코레이터 디자인 패턴의 고전적인 예입니다. 기본 아이스크림을 만든 다음 원하는 대로 토핑을 추가합니다. 토핑이 추가된 이 토핑은 기본 아이스크림의 맛을 바꿉니다. 당신은 당신이 원하는만큼 토핑을 추가 할 수 있습니다. 이 샘플 시나리오는 아래에서 구현됩니다. 아이스크림데코레이터를 제거해도 아이스크림은 여전히 존재할 수 있습니다. 패턴의 실용적인 사용을 언급 할 때 나는 좋아했다. 독자로서.

아이스크림 아이스크림 = 새로운 허니 데코레이터 (새로운 너티 데코레이터 (새로운 심플 아이스크림 ()); 다음 클래스는 데코레이터 클래스입니다. 데코레이터 디자인 패턴의 핵심입니다. 인터페이스 유형에 대한 특성이 포함되어 있습니다. 인스턴스는 생성자 사용 데코레이터를 만들 때 동적으로 할당됩니다. 해당 인스턴스 메서드가 할당되면 호출됩니다. ->데코레이터 트롤 = 새로운 ClubDecorator (트롤)를 추가하여 간단한 트롤의 동작을 변경하십시오. 트롤.getAttackPower() // 42 트롤.공격(); 트롤은 당신을 잡아하려고합니다! 트롤은 클럽과 함께 당신을 스윙! 트롤.플리배틀(); 트롤은 공포에 비명을 지르고 도망! 그리고 실행하는 동안 자신의 클럽을 잃는다! 구성 요소와 데코레이터 사이에 컴포지션이 있어야 하며 집계가 아니라 구성 요소가 있어야 한다고 생각합니다. 개체 지향 프로그래밍에서 데코레이터 패턴은 동일한 클래스의 다른 개체의 동작에 영향을 주지 않고 동작을 동적으로 개별 개체에 추가할 수 있는 디자인 패턴입니다. [1] 데코레이터 패턴은 고유한 관심 영역이 있는 클래스 간에 기능을 분할할 수 있으므로 단일 책임 원칙을 준수할 때 유용합니다. [2] 데코레이터 패턴은 구조적으로 책임 패턴의 체인과 거의 동일하며, 그 차이는 책임 체인에서 정확히 하나의 클래스가 요청을 처리하는 반면 데코레이터의 경우 모든 클래스가 요청을 처리한다는 것입니다.

자바 API의 위의 독자는 데코레이터 디자인 패턴을 사용하여 설계되었습니다. 이렇게 하면 다른 Decorator 개체를 통해 작업하여 런타임에 개체의 기능을 동적으로 확장할 수 있습니다. 아래UML 클래스 및 시퀀스 다이어그램을 참조하십시오.

Posted in Bez kategorii