装饰者模式:当需要给对象添点数据,加点小功能时,这个模式最合适了。
这两个例子最典型:有一杯咖啡,可以给它加奶、加糖、加巧克力、加泡沫,有的消费者要加奶加糖的;有的要加巧克力加盐的;总之就是不同的小需求的对象的构建
Java IO 是典型的装饰者模式。InputSteam in = new LineNumberInputStream(new BuffredInputStream(new FileInputSteam); 把各种小需求加进这个输入流中。
缺点是:类太多了!!没有个类图,直接看它API烦得要死~
类图如下:

贴一个装饰者模式的例子:
public class DecoratorPattern { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Component c = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent())); System.out.println("cost="+c.getCost()); System.out.println("description = "+c.getDescription()); } } abstract class Component{ String description; int cost; public int getCost(){ return cost; } public String getDescription(){ return description; } } abstract class Decorator extends Component{ public abstract String getDescription(); public abstract int getCost(); } class ConcreteComponent extends Component{ public ConcreteComponent(){ description = "ConcreteComponent"; cost =1; } @Override public int getCost(){ return cost; } public String getDescription(){ return description; } } class ConcreteDecorator1 extends Decorator{ Component component; ConcreteDecorator1(Component c){ component = c; } @Override public String getDescription() { // TODO Auto-generated method stub return component.getDescription()+" + ConcreteDecorator1"; } public int getCost(){ return 2+component.getCost(); } } class ConcreteDecorator2 extends Decorator{ Component component; ConcreteDecorator2(Component c){ component = c; } @Override public String getDescription() { // TODO Auto-generated method stub return component.getDescription()+" + ConcreteDecorator2"; } public int getCost(){ return 6+component.getCost(); } }
浙公网安备 33010602011771号