摩卡咖啡

设计模式笔记-装饰器模式

让人想犯罪 __ 提交于 2020-03-08 21:12:14
设计模式 装饰器模式 文章目录 设计模式 装饰器模式 定义 假定场景 运行时修改对象的行为 饮料相关代码 行话 注意 java io的装饰器模式 自定义一个装饰器类 一个比继承更具有可扩展性的设计模式。这种设计模式带来的直接好处是 对扩展开发,对修改关闭 ,这是一个重要的设计原则。当然,它也带来了一些问题,比如:类数量较多,客户端程序员难以理解。但是,只要理解了这种设计模式的结构就可以轻松地使用这种设计模式相关的api,比如java io相关的api。本文会在末尾基于 装饰器模式 对java io做一个总结。 定义 动态地赋予对象新的责任。 所谓 动态 的意思是 在运行时而非编译时 。而 继承 是在编译时就决定了的,所以 继承 必须在 编译时 完成对类的扩展。 继承 导致的问题就是 死板 ,即代码灵活性较低,因为我们总要先在某个子类中定义好需要扩展的行为,再去另外一个子类中定义需要扩展的行为…直到所有子类。当子类个数较多时就会非常复杂。 所谓 责任 是指 行为/功能 。特别需要说明的是,我们 绝对不改变 现有类 的行为,我们只改变 当前类 该行为的结果 ,这两个类具有相同的接口(注意,所谓接口是指可以接收相同的消息,所以我使用 具有 而非 实现 二字)。 上述解释通过阅读下述假定场景可知。 假定场景 请先看下面的 饮料相关代码 。 假定要卖咖啡,所以要计算所有种类咖啡的价格