java设计模式-装饰者模式

模式定义

动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。

设计原则

  1. 多用组合,少用继承
  2. 类应设计的对扩展开放,对修改关闭。

UML类图

装饰者模式实例

先写一个被装饰者食物的类
被装饰者-食物类
/**
* 被装饰者-食物类
*/
public class Food {
private String foodName;
   public Food() {
}
public Food(String foodName) {
this.foodName = foodName;
   }
public String make() {
return foodName;
   }

}

再定义几个装饰者类
装饰者-面包类
/**
* 装饰者-面包类
*/
public class Bread extends Food {
private Food food;
   public Bread(Food food) {
this.food = food;
   }
public String make() {
return food.make() + “+面包”;
   }
}
装饰者-奶油类
/**
* 装饰者-奶油类
*/
public class Cream extends Food {
private Food food;
   public Cream(Food food) {
this.food = food;
   }
public String make() {
return food.make() + “+奶油”;
   }

}

装饰者-蔬菜类
/**
* 装饰者-蔬菜类
*/
public class Vegetable extends Food {
private Food food;
   public Vegetable(Food food) {
this.food = food;
   }
public String make() {
return food.make() + “+蔬菜”;
   }
}
测试装饰者模型
public class DecoratorDemo {
public static void main(String[] args) {
Food food = new Bread(new Vegetable(new Cream(new Food(“香肠”))));
       System.out.println(food.make());
   }

}

运行结果
香肠+奶油+蔬菜+面包
Process finished withexit code 0
这就相当于生活当中制作三明治的过程,我们先加一根香肠,再香肠上抹上一层奶油,再加上几片蔬菜,最后拿面包夹上。

java.io中的装饰者模式

总结

装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。
本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » java设计模式-装饰者模式

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多