五.装饰模式

1.定义

装饰者模式:动态的将责任附加到对象上,若要拓展功能,装饰者提供比继承更有弹性的替代方案类应该对拓展开发,对修改关闭,想想观察者模式

2.简介

装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。虽然装饰者模式能够动态将责任附加到对象上,但是他会产生许多的细小对象,增加了系统的复杂度。

3.类图

image.png

4.实例

如果对多态理解不深刻,请先理解多态,要不然方法调用顺序会糊里糊涂。
本实例会先调用SausageDecorator的create()方法,向上调用Decorator的create()方法,由于SausageDecorator里传递是EggDecorator对象,Decorator的create()调用实际是EggDecorator的方法,以此向上传递调用。

package designMode;

import java.io.IOException;

/**
 * 

* 装饰者模式:动态的将责任附加到对象上,若要拓展功能,装饰者提供比继承更有弹性的替代方案 * 类应该对拓展开发,对修改关闭,想想观察者模式 */ public class DecoratorPattern { public static void main(String[] args) throws IOException { Potato potato = new Potato(); Hamburger hamburger = new SausageDecorator(new EggDecorator(potato)); hamburger.create(); hamburger.price(); } //抽象构件(Component) static abstract class Hamburger{ private Integer price=1; abstract void create(); abstract Integer price(); } //具体的构件(ConcreteComponent) static class Potato extends Hamburger { @Override void create() { System.out.println("这是一个普通的汉堡包,价格为:"+super.price); } @Override Integer price() { Integer price = super.price; return price; } } //抽象装饰类(Decorator) static abstract class Decorator extends Hamburger { private Hamburger hamburger; protected Decorator(Hamburger hamburger) { this.hamburger = hamburger; } @Override public void create() { hamburger.create(); } @Override public Integer price() { return hamburger.price(); } } //具体装饰类(ConcreteDecorator) static class EggDecorator extends Decorator { public EggDecorator(Hamburger hamburger) { super(hamburger); } @Override public void create() { super.create(); System.out.print("加了一个蛋"); } @Override public Integer price() { int i = super.price() + 1; System.out.println("现在价格为:"+i); return i; } } //具体装饰类(ConcreteDecorator) static class SausageDecorator extends Decorator { public SausageDecorator(Hamburger hamburger) { super(hamburger); } @Override public void create() { super.create(); System.out.print("加了一个香肠"); } @Override public Integer price() { int i = super.price() + 1; System.out.println("现在价格为:"+i); return i; } } }

你可能感兴趣的:(五.装饰模式)