炒面

装饰者模式

瘦欲@ 提交于 2019-11-30 17:05:39
装饰者模式能够动态地将责任附加到对象上,在扩展对象功能方面比继承更加灵活,具体来说,装饰者模式将行为委托给相应的包装对象,并添加上自己的对应逻辑来实现特定的功能。装饰者模式的UML图如下: 首先需要有被装饰的组件接口和具体组件,然后有装饰者对象,由于装饰者对象需要能够代替组件,所以要继承组件接口,并组合组件对象来完成委托任务。 下面以一个简单的快餐店为例子来介绍装饰者模式的用法。快餐店会有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样。按照上面的UML类图,先定义组件接口(快餐)和具体组件(炒饭、炒面)。 1 //快餐接口 2 public interface FastFood { 3 float getCost(); //获取价格 4 String getDescription(); //获取描述 5 } 6 7 //炒饭 8 public class FriedRice implements FastFood{ 9 private float price = 5; 10 String description = "炒饭"; 11 @Override 12 public float getCost() { 13 return this.price; 14 } 15 16 @Override 17 public