- 装饰器Decorate方法实现Html1,增加一个Html1的引用,Decorate的构造方法加上Html1的参数来初始化Html1
- 最佳实现场景其实就是去买奶茶,一杯原味奶茶加很多小料,如果按照原始方法,需要一开始就把奶茶+小料的各种叠加方法都要实现,比如A奶茶+A小料,A奶茶+B小料……这些方法,如果增加了一种奶茶,那么就又要重新写叠加的方法,这样子没几种奶茶就会造成类爆炸,
- 装饰器模式是代替增加子类的一种解决方案,体现了聚合/合成复用原则的思想,尽量使用组合的方式来扩展功能,这样就把基本功能和扩展功能解耦了,使得代码可复用,可维护,灵活。关键点在于装饰器模式可以动态地为对象增加扩展功能。
- 装饰器方法直接转发请求至引用对象

public interface Html1 {void setText(String text);String getText();}class Span implements Html1{String text;@Overridepublic void setText(String text) {this.text = text;}@Overridepublic String getText() {return "<span>"+this.text+"</span>";}}class Decorate implements Html1{Html1 html1;public Decorate(Html1 html1){this.html1 = html1;}@Overridepublic void setText(String text) {this.html1.setText(text);}@Overridepublic String getText() {return this.html1.getText();}}class Ul extends Decorate{public Ul(Html1 html1) {super(html1);}public String getText(){return "<li>"+ html1.getText()+"</li>";}}class Div extends Decorate{public Div(Html1 html1) {super(html1);}public String getText(){return "<div>"+super.html1.getText()+"</div>";}}class Test{public static void main(String[] args) {Html1 html1 = new Div(new Ul(new Span()));html1.setText("Eason");System.out.println(html1.getText());//<div><li><span>Eason</span></li></div>}}
