Java设计模式之装饰者模式
Posted Mr.落魄书生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式之装饰者模式相关的知识,希望对你有一定的参考价值。
首先呢先引入一个小问题:
想一下我们应该怎么实现它呢?
一般的情况下 可以使用继承的方法去实现如图:
这样的话很明显,类爆炸啦!有很多种组合,有没有更好的组合呢?下面就引入了装饰者模式
下面看看它的类图:
下面是具体的案例实现:
//被装饰者的对象接口 public interface Drink { public float cost(); public String desc(); }
//具体的被装饰者 public class Dounai implements Drink{ @Override public float cost() { return 3f; } @Override public String desc() { return "纯豆奶"; } }
//装饰者的基类 public abstract class Decroator implements Drink { private Drink drink; //要装饰的对象 public Decroator(Drink drink) { this.drink = drink; } @Override public float cost() { return drink.cost(); } @Override public String desc() { return drink.desc(); } }
//具体的装饰者 public class Blackdou extends Decroator { public Blackdou(Drink drink) { super(drink); } @Override public float cost() { return super.cost()+2f; } @Override public String desc() { return super.desc()+"+黑豆"; } }
//具体的装饰者类 public class SugarDecroator extends Decroator { public SugarDecroator(Drink drink) { super(drink); } @Override public float cost() { return super.cost()+1f; } @Override public String desc() { return super.desc()+"+糖"; } }
public class Test { public static void main(String[] args) { Drink drink = new Dounai(); Blackdou blacktang = new Blackdou(drink); SugarDecroator sugar = new SugarDecroator(blacktang); System.out.println("这杯豆浆价格为:"+sugar.cost()); System.out.println("描述为:"+sugar.desc()); } }
测试类的运行结果为:
这杯豆浆价格为:6.0
描述为:纯豆奶+黑豆+糖
以上是关于Java设计模式之装饰者模式的主要内容,如果未能解决你的问题,请参考以下文章