이 기사에서는 데코레이터 패턴을 기반으로 Java가 구현 한 염색 된 증기 빵의 경우에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. 패턴 정의
데코레이터 패턴은 원본 파일을 변경하고 상속을 사용하지 않고 객체 기능을 동적으로 확장합니다. 그것은 랩핑 객체, 즉 장식을 만들어 실제 물체를 감습니다.
장식 객체와 실제 객체는 동일한 인터페이스를 가지므로 클라이언트 객체가 실제 객체와 같은 방식으로 장식 객체와 상호 작용할 수 있습니다.
장식적인 물체에는 실제 물체에 대한 참조가 포함되어 있습니다.
2. 모델의 예
1. 패턴 분석
우리는이 모델을 설명하기 위해 염색 된 빵을 만들기 위해 흑인 벤더의 사례를 사용합니다.
2. 데코레이터 모드 정적 클래스 다이어그램
3. 코드 예제
3.1 찐 빵 인터페이스 -Ibread를 만듭니다
package com.demo.abs;/** * 스팀 롤빵 처리 인터페이스 * * @author */public interface ibread {// 자료 준비 public void prepair (); // Harmony public void kneeflour (); // 찐 빵 공개 void Steamed (); / *** 증기 빵 처리*/ public void process ();}3.2 일반 BUN 구현 - 정상 브레드
package com.demo.abs;/** * 정상 찐 빵 구현 * * @author */public class normalbread emplicals ibread {// 성분 준비 public void prepair () {System.out.println ( "밀가루, 물 및 베이킹 파우더 준비 ..."); } // Hemian public void kneeflour () {system.out.println ( "hmian ..."); } // 찐 빵 공개 void steamed () {System.out.println ( "찐 빵 ... 향기로운 찐빵은 오븐에서 나왔습니다!"); } / *** 증기 빵 가공* / public void process () {// 성분 준비 prepair (); // Kneadflour (); // 찐 찐 (); }}3.3 추상 데코레이터 - Abstractbread를 만듭니다
package com.demo.decorator; import com.demo.abs.ibread;/** * Abstract Decorator * * @author * */public acpract class Abstract Bread는 ibread {// 저장 Ibread 객체 개인 최종 Ibread Bread; Public AbstractBread (Ibread Bread) {this.bread = 빵; } // 자료 공개 공개 void repay () {this.bread.prepair (); } // 부드럽게 공개 void kneeflour () {this.bread.kneadflour (); } // 찐빵 공개 void steamed () {this.bread.steamed (); } // 스팀 빵 처리 공개 void process () {prepair (); kneeflour (); 찐 (); }}3.4 염료 데코레이터 - 콘 디코레이터를 만듭니다
package com.demo.decorator; import com.demo.abs.ibread;/** * dyeed corn buns * * @author * */public class corndecorator 확장 AbstractBread {// public corndecorator (ibread bread) {Super (bread); } // Black-Heart vendors는 public void paint () {System.out.println을 염색하기 시작했습니다 ( "레몬 옐로우 컬러 팬트 추가 ..."); } // 부모 클래스의 반죽 메소드를 과부하로 @override public void kneeflour () {// this.paint ()가 밀가루에 염료를 추가 한 후 시작됩니다. // PATE SUPER.KNEADFLOUR (); }}3.5 Scalypse Decorator -Sweetdecorator를 만듭니다
package com.demo.decorator; import com.demo.abs.ibread;/** * Cyperus steamed bun * * @author */public class sweetdecorator 확장 actractbread {// public sweetdecorator (ibread bread) {Super (빵); } // Black-Heart 벤더는 Cyperus public void paint () {System.out.println ( "Add Cyperus ..."); } // 상위 클래스의 반죽 메소드에 과부하가 발생합니다. @override public void kneeflour () {// 도루에 Cyperus를 추가 한 후 반죽을 시작하십시오. // Hemma Super.kneadflour (); }}3.6 달콤한 옥수수 찐빵 생산 - 클라이언트
package com.demo; import com.demo.abs.ibread; import com.demo.abs.normalbread; import com.demo.decorator.corndecorator; import com.demo.decorator.sweetdecorator;/** * 클라이언트 응용 프로그램 * * @author */public class {/** * Argss */public antatic (public void) // 장식용 증기 빵 시스템의 생산 시스템 .out.println ( "/n ===== Decorative Steamed Buns 시작 !!!"); // 일반 정상 찐 BUN 인스턴스 생성 // 이것은 랩 (장식) Ibread NormalBread = New NormalBread (); // 정상적인 찐빵 장식을 시작합시다! ! ! // saccharin을 사용하여 찐 빵을 장식하십시오. 일반 브레드 = 새로운 sweetdecorator (normalbread); // 레몬 옐로우 컬러를 사용하여 찐 빵을 장식하여 정상 브레드 = 새로운 CornDecorator (NormalBread); // 찐 BUN 정보 생산 normalbread.process (); System.out.println ( "===== 찐 빵 끝을 장식하십시오 !!!"); }}4. 운영 결과
==== 찐 빵 장식을 시작하십시오! ! !
밀가루, 물 및 베이킹 파우더 준비 ...
레몬 옐로우 컬러를 추가 ...
시아닌 추가 ...
유지...
찐 빵 ... 향기로운 찐 빵은 오븐에서 나왔습니다!
==== 장식 찐 롤빵 끝! ! !
3.이 모델의 디자인 원리
1 폐쇄 변경 부분
2 "열고 닫습니다"원칙
3 초록 지향 프로그래밍
4. 상속보다는 조합을 선호합니다
4. 행사를 사용하십시오
1. 기존 객체에 동적으로 새로운 기능이나 책임을 추가 해야하는 경우 데코레이터 패턴 사용을 고려할 수 있습니다.
2. 물체의 책임이 종종 변경되거나 책임이 동적으로 증가 해야하는 경우,이 방법으로 인해 서브 클래스가 너무 빨리 확장되고 제어하기가 어렵 기 때문에 상속 된 서브 클래스 확장을 추가하지 마십시오. 현재 데코레이터 모드를 사용할 수 있습니다.
5. 데코레이터 모드 정적 클래스 다이어그램
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.