publicclassTankextendsElement{ @Override public String getEquipment(){ return"我是一辆坦克"; } }
publicabstractclassBaseEquipmentextendsElement{ }
publicclassAttackEquipmentextendsBaseEquipment{ private Element element; publicAttackEquipment(Element element){ this.element=element; } @Override public String getEquipment(){ return element.getEquipment()+",增加攻击力"; } }
publicclassSpeedEquipmentextendsBaseEquipment{ private Element element; publicSpeedEquipment(Element element){ this.element=element; } @Override public String getEquipment(){ return element.getEquipment()+",增加速度"; } }
publicclassLifeEquipmentextendsBaseEquipment{ private Element element; publicLifeEquipment(Element element){ this.element=element; } @Override public String getEquipment(){ return element.getEquipment()+",增加生命"; } }
在最终的调用的时候,我们需要什么装备,就可以直接使用。调用如下:
1 2 3 4 5 6
Element tank = new Tank(); tank = new LifeEquipment(tank); tank = new AttackEquipment(tank); tank = new SpeedEquipment(tank); System.out.println(tank.getEquipment());
运行结果:
1
我是一辆坦克,增加生命,增加攻击力,增加速度
Java中的装饰者模式的使用
在Java 中,IO的实现逻辑就是装饰者模式 ,首先看下IO的逻辑类图:
1 2 3 4
InputStream dataStream = ClassLoader.getSystemResourceAsStream(""); dataStream = new BufferedInputStream(dataStream); dataStream = new DataInputStream(dataStream); dataStream = new LineNumberInputStream(dataStream);