데코레이터 패턴은 물체에 몇 가지 추가 책임을 동적으로 추가 할 수 있습니다. 함수 추가 측면에서, 데코레이터 모드는 서브 클래스를 생성하는 것보다 유연합니다.
이 모드의 해당 환경은 다음과 같습니다.
(1) 다른 물체에 영향을 미치지 않고 역동적이고 투명한 방식으로 단일 객체에 책임을 추가하십시오.
(2) 취소 할 수있는 책임을 처리하십시오.
(3) 서브 클래스를 생성하는 방법이 확장에 사용될 수없는 경우. 한 가지 시나리오는 다수의 독립적 인 확장증이있을 수 있으며, 이는 각 조합을 지원하기 위해 많은 수의 서브 클래스를 생성하여 서브 클래스의 수가 폭발하게된다는 것입니다. 다른 경우는 클래스 정의가 숨겨져 있거나 클래스 정의를 서브 클래스를 생성하는 데 사용할 수 없기 때문일 수 있습니다.
이 모드를 구현하기위한 주요 단계 :
(1) 구성 요소 (장식 된 물체의 기본 클래스) : 객체의 인터페이스를 정의하며,이 객체에 책임을 동적으로 추가 할 수 있습니다.
(2) Concretecomponent (특정 장식 대상) : 특정 물체를 정의하고 데코레이터는 추가 책임을 추가 할 수 있습니다.
(3) Decorator (Decorator Abstract Class) : 구성 요소 인스턴스에 대한 참조를 유지하고 구성 요소와 일치하는 인터페이스를 정의합니다 ( 즉, 장식 된 물체의 기본 클래스를 상속하거나 구현하기위한 ).
(4) Concretedecorator : 내부적으로 보유한 특정 장식 물체에 특정 책임을 추가하는 특정 장식 대상;
이것은 모든 사람이 이해하기가 약간 어려울 수 있으므로 우리는 여전히 조용합니다.
겨울이 지나면 날씨가 더 차가워졌습니다. 퇴근 후, 베테랑 미식가로서, 두세 친구와 함께 뜨거운 냄비 잔치를 갖도록 약속을 잡는 것이 좋을 것입니다. 뜨거운 냄비에 대해 말하면, 나는 모든 종류의 냄비 바닥과 반찬과 함께 청두에서 먹은 달롱 뜨거운 냄비에 대해 언급해야하지만, 내가 가장 좋아하는 것은 달롱 뜨거운 냄비, 매운 쇠고기, 타이 와이 소시지, tuotuo 쇠고기, 매운 돼지 갈비 등의 원래 냄비 바닥입니다.
이것에 관해서는, 당신은 그것에 대해 조금 느껴야합니다. 위에서 언급 한 냄비 바닥은 실제로 장식 물체의 기초 입니다. 성분은 실제로 장식용 추상 대상 입니다. Dalong Hot Pot Original Pot Bottom의 특정 냄비 바닥은 특정 장식물입니다. 냄비 바닥을 장식하는 데 사용되는 다양한 반찬은 특정 장식 물체 입니다. 이것에 대해 말하면, 모든 사람들은 갑자기 그것을 깨달았어야합니다. 특정 코드 구현을 시작하겠습니다.
1 단계 : 장식 된 물체의 기본 클래스를 정의하십시오 (초록 클래스 또는 인터페이스가 될 수 있음)
public interface guodi {public float cost (); // 물론 냄비 바닥은 가격이 책정되어야합니다. 공개 문자열 이름 (); // 이름도 사용할 수 있어야합니다} 2 단계 : 특정 장식 물체를 정의합니다 (즉, 다양한 냄비 바닥, 2 개는 여기에 정의됩니다).
공개 클래스 Yuanyang은 Guodi {@override public float cost () {return 48.0f; } @override public String name () {return "double pot base"; }} public class dalongyan은 guodi {@override public float cost () {return 59.0f; } @override public String name () {return "Dalong Hot Pot Original Pot Base"; }}3 단계 : 데코레이터 초록 클래스를 정의합니다
공개 초록 클래스 Peicai는 Guodi {Private Guodi Guodi; 공개 식품 디코레이터 (Guodi Guodi) {super (); this.guodi = guodi; } @override public float cost () {return guodi.cost (); } @override public String name () {return guodi.name (); }}4 단계 : 특정 데코레이터 객체를 정의하십시오
공개 계급 Malaniurou는 Peicai {public malaniurou (Guodi Guodi) {Super (guodi); } @override public float cost () {return super.cost ()+46f; } @override public String name () {return super.name ()+"+Spicy Beef"; }} 공개 클래스 Maodu는 peicai {public maodu (Guodi Guodi) {Super (guodi); } @override public float cost () {return super.cost ()+30f; } @override public String name () {return super.name ()+"+큰 나이프 트립"; }}테스트 클래스 :
공개 클래스 테스트 {public static void main (String [] args) {guodi guodi = new dalongyan (); // 달롱 뜨거운 냄비 원래 냄비 바닥 malaniurou (guodi); // 매운 쇠고기 maodu x = new maodu (y); // bask a big a kake system.out.println 소비 "+s.cost ()); }}출력 결과 :
1. 총 Dalong Hotpot Original Pot Bottom + Spicy Beef + Dadao Tripe가 주문되었고 총 135 명이 소비되었습니다.
위는 편집자가 소개 한 Java Decorator 모델입니다 (실제 관점에서 코드 원칙을 이해). 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!