Вторник, 19 ноября 2019

자바 데코레이터 패턴 예제

35

다음 Java 예제에서는 창/스크롤 시나리오를 사용하여 데코레이터를 사용하는 것을 보여 줍니다. 나는 디자인 시간에 아이스크림장식을 제거하고 디자인 시간에 메이크 크림 방법을 만드는 아이스크림 인터페이스를 구현합니다 허니 데코레이터 와 너티 데코레이터를 직접 디자인 할 수 있습니다. 런타임에 나는 간단한 아이스크림의 개체를 만들고 허니 데코레이터 및 NuttyDecorator 개체 생성자로 전달합니다. 괜찮습니까? 데코레이터는 기사에 대한 추가 의무를 강력하게 추가합니다. 소나무 나 전나무 나무에 추가 되는 장식 은 데코레이터의 인스턴스입니다. 조명, 페스톤, 달콤한 막대기, 유리 장식 등., 행복한 모습을 제공하기 위해 나무에 추가 할 수 있습니다. 장식은 활용 특정 트리밍에 작은 마음을 지불 크리스마스 트리크로 명백한 나무 자체를 변경하지 않습니다. 여분의 유용성의 예를 들어, 조명의 확장은 크리스마스 트리를 «점등»할 수 있습니다. 예를 들어 창 시스템의 창을 고려합니다. 창 의 내용을 스크롤할 수 있도록 하려면 가로 또는 세로 스크롤 막대를 적절히 추가할 수 있습니다. 창이 Windows 인터페이스의 인스턴스로 표시된다고 가정하고 이 클래스에 스크롤 막대를 추가하는 기능이 없다고 가정합니다. 하나를 만들 수 있는 하위 클래스 ScrollingWindow 그들을 제공 하는, 또는 기존 창 개체에이 기능을 추가 하는 ScrollingWindowDecorat를 만들 수 있습니다.

이 시점에서, 어느 솔루션도 괜찮을 것입니다. 다음 Java 예제에서는 커피 만들기 시나리오를 사용하여 데코레이터를 사용하는 것을 보여 줍니다. 이 예제에서는 비용과 재료만 포함합니다. 안녕하세요, 나는 당신의 블로그의 팬이되었다, 나는 설명의 방법을 아주 많이 좋아하고, 나는이 아이스크림 예에 대한 설명이 필요합니다. 왜 우리는 아이스크림데코터를 가지고 대신 나는 허니 아이스크림아이스크림에서 확장하고 간단한 아이스크림과 다른 기능을 동일하게 보유 할 수 있습니다 가질 수 있습니까? 채우기색상데코레이터를 만들어 셰이프에 채우기 색상의 기능을 추가합니다. 자바 API의 사용과 함께 예제와 함께 정말 좋은 하나. 감사합니다 사티. 위의 UML 클래스 다이어그램에서 추상 데코레이터 클래스는 참조(구성 요소)를 데코레이팅된 개체(구성 요소)로 유지하고 모든 요청을 전달합니다(component.operation().). 이렇게 하면 데코레이터가 구성 요소의 클라이언트에 투명(보이지 않음)됩니다. 데코레이터 디자인 패턴을 사용하면 런타임에 클래스가 아닌 개체에 기능을 추가할 수 있으며 요구 사항 및 선택에 따라 개별 개체에 이 사용자 지정 기능을 적용할 수 있습니다. 이전 예제에서는 «SimpleWindow» 및 «WindowDecorator» 클래스가 창 컨트롤을 장식하기 위해 이 시나리오에서 필요한 «draw()» 메서드와 «getDescription()» 메서드를 정의하는 «Window» 인터페이스를 구현합니다. .

이제 창에 테두리를 추가하는 기능도 원한다고 가정합니다. 다시 말하지만 원래 Window 클래스는 지원되지 않습니다. 스크롤창 하위 클래스는 이제 새로운 종류의 창을 효과적으로 만들었기 때문에 문제가 발생합니다. 모든 창이 아닌 많은 창에 테두리 지원을 추가하려면 WindowsWithBorder 및 ScrollingWindow 등 하위 클래스를 만들어야합니다. 이 문제는 추가할 모든 새 기능 또는 창 하위 유형으로 인해 더 악화됩니다. 데코레이터 솔루션의 경우 런타임에 새 BorderedWindow 데코레이터를 만들면 기존 창을 스크롤창 데코레이터 또는 BorderedWindow데코 또는 둘 다로 장식할 수 있습니다.