知识库

5、装饰模式

网站:知识库   来源:网络收集

装饰模式:Decorator 1、基本原理 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由 于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且 随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的 组合)会导致更多子类的膨胀。

如何使“对象功能的扩展”能够根据需 要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题? 从而使得任何“功能扩展变化”所导致的影响将为最低?这就是本文要 讲的Decorator模式。

装饰模式(别名Wrapper)是在不必改变原类文件和使用继承的情 况下,动态的扩展一个对象的功能。

它通过创建一个包装对象,也就 是装饰来包裹真实对象,了比继承更具弹性的代替方案。

装饰模式一般涉及到的角色 抽象构建角色(Component):给出一个抽象的接口,以规范准 备接受附加责任的对象。

具体的构建角色(ConcreteComponent):定义一个将要接受 附加责任的类。

抽象的装饰角色 (Decorator):持有一个抽象构建 (Component)角色的引用,并定义一个与抽象构件一致的接 口。

具体的装饰角色(ConcreteDecorator):负责给构建对象“贴 上”附加的责任。

2、优缺点 优点 Decorator模式与继承关系的目的都是要扩展对象的功 能,但是Decorator可以比继承更多的灵活性。

把类中的装饰功能从类中搬移出去,这样可以简化原有

5、装饰模式

的类。

有效地把类的核心功能和装饰功能区分开了。

通过使用不同的具体装饰类以及这些装饰类的排列组 合,可创造出很多不同行为的组合。

缺点 这种比继承更加灵活机动的特性,也同时意味着更加多 的复杂性。

装饰模式会导致设计中出现许多小类,如果过度使用, 会使程序变得很复杂。

符合的设计原则: 多用组合,少用继承。

利用继承设计子类的行为是在编 译时静态决定的,且所有的子类都会继承到相同的行 为。

如能够利用组合扩展对象的行为,就可在运行时动 态进行扩展。

类应设计的对扩展开放,对修改关闭。

3、适用情况 1. 需要扩展一个类的功能,或给一个类添加附加职责。

2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。

3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能, 从而使继承关系变的不现实。

4. 当不能采用生成子类的方法进行扩充时。

一种情况是,可能有大 量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈 性增长。

另一种情况可能是因为类定义被隐藏,或类定义不能用于 生成子类。

4、应用举例 1、送生日蛋糕: MM们要过生日了,怎么也得表示下吧。

最起码先送个蛋糕。

蛋糕多 种多样了。

巧克力,冰淇淋,奶油等等。

这都是基本的了,再加点额外 的装饰,如蛋糕里放点花、放贺卡、放点干果吃着更香等等。

分析: 方案1:如果采用继承会造成大量的蛋糕子类 方案2、蛋糕作为主体,花,贺卡,果仁等是装饰者,需要时加到蛋 糕上。

要啥我就加啥。

2、极品飞车喷涂鸦: “极品飞车”这款游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂 鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,比如

5、装饰模式

可以是红色火焰、紫色霞光等 3、Java I/O API java IO中需要完成对不同输入输出源的操作,如果单纯的使用继承这 一方式,无疑需要很多的类。

比如说,我们操作文件需要一个类,实现 文件的字节读取需要一个类,实现文件的字符读取又需要一个类....一次 类推每个特定的操作都需要一个特定的类。

这无疑会导致大量的IO继承 类的出现。

显然对于编程是很不利的。

而是用装饰模式则可以很好的解决这一问题,在装饰模式中:节点 流(如FileInputStream)直接与输入源交互,之后通过过滤流 (FilterInputStream)进行装饰,这样获得的io对象便具有某几个的功 能,很好的拓展了IO的功能。

5、其他 5.1装饰模式和继承的比较 装饰模式 用来扩展特定对象的功能 不需要子类 动态地 运行时分配职责 继承 用来扩展一类对象的功能 需要子类 静态地 编译时分派职责

5、装饰模式

防止由于子类而导致的复杂和混 乱 更多的灵活性 对于一个给定的对象,同时可能 有不同的装饰对象,客户端可以 通过它的需要选择合适的装饰对 象发送消息 很容易增加任何的扩展 导致很多子类产生,在一些场 合,报漏类的层次 缺乏灵活性 对于所有可能的联合,客户期 望 困难扩展 5.2、模式的简化: 1. 如果只有一个Concrete Decorator类时,可以将Decorator和Concrete Decorator合并。

2、如果只有一个Concrete Component类而没有抽象的Component接口 时,可以让Decorator继承Concrete Component。

总结 Decorator模式采用对象组合而非继承的手法,实现了在运行时动态 的扩展对象功能的能力,而且可以根据需要扩展多个功能,避免了单独 使用继承带来的“灵活性差”和“多子类衍生问题”。

同时它很好地符合面 向对象设计原则中“优先使用对象组合而非继承”和“开放-封闭”原则。

5、装饰模式

5、装饰模式

相关内容
  • 5装饰设计模式

    5装饰设计模式

    5装饰设计模式...

  • 天地和装饰第五代家装买“家”模式

    天地和装饰第五代家装买“家”模式

    天地和装饰第五代家装买“家”模式...

  • 第五章 清单计价模式下装饰工程计量与计价

    第五章 清单计价模式下装饰工程计量与计价

    第五章 清单计价模式下装饰工程计量与计价...

  • 装饰与房地产商合作模式

    装饰与房地产商合作模式

    装饰与房地产商合作模式...

  • 中职“2.5+0.5”人才培养模式下建筑装饰专业产教融合初探

    中职“2.5+0.5”人才培养模式下建筑装饰专业产教融合初探

    中职“2.5+0.5”人才培养模式下建筑装饰专业产教融合初探...

  • java设计模式之装饰设计模式

    java设计模式之装饰设计模式

    java设计模式之装饰设计模式...

  • 天地和装饰第五代家装模式的优势在哪里?

    天地和装饰第五代家装模式的优势在哪里?

    天地和装饰第五代家装模式的优势在哪里?...

  • 装饰装修公司管理运营模式

    装饰装修公司管理运营模式

    装饰装修公司管理运营模式...

  • 欧洲建筑室内风格样式第5章 洛可可建筑与装饰艺术

    欧洲建筑室内风格样式第5章 洛可可建筑与装饰艺术

    欧洲建筑室内风格样式第5章 洛可可建筑与装饰艺术...

  • 华浔装饰不同装修模式的适合人群及优劣点

    华浔装饰不同装修模式的适合人群及优劣点

    华浔装饰不同装修模式的适合人群及优劣点...

  • 网友在搜
  • gta5故事模式
  • pk10最牛稳赚模式5码
  • gta5竞速模式
  • gta5僵尸模式
  • 一加5工程模式
  • 商业模式
  • 夜间模式
  • 山东天气随机模式
  • 盈利模式
  • 鸣人仙人模式
  • 仙人模式
  • 商业模式画布
  • 鸣人六道仙人模式
  • 冒险模式刷金币
  • 鸣人九尾模式
  • 模式
  • 18周b超看男女准吗 把爱放开 微盘 vcs.xml文件 决战60秒女打女屁股 塞尔达 dlc 美服 日服 macbook pro 2016 缺陷 刘关张 荣耀water play玩游戏 韩国现代一体机电脑 钟小离顾墨南小说 红松路黄桦路 eviews 林夕情感文章 Small 收review吗 我爱过的女孩txt 极端聪明人的特征知乎 ps配色教程 捷波朗弦月3蓝牙耳机 wps2016素材库在哪里 美剧looking百度云 www.lelehel/.com dq heroes怎么钓鱼 Oh!好困扰啊!第一集 柯南对草地女王说什么 钢铁雄心4 宪兵模板 妖孽王爷腹黑郡主. 律政强人国语在线播放 半音阶口琴摇篮曲简谱 culter and gross 初音ft dx白金攻略 辩论赛娱乐辩题 世界著名人物雕像图片 红米5 plus 充电线短 奥迪a3加装自动泊车 风声原著五人真实身份 90平方三室一厅效果图 excel自动录入数据 怪物猎人4g 特典 文件 鲁迅批判中国人语录 海尔洗衣机2017年新款 恋姬无双 本子梦幻舞娘 吉林省人亊考试网官网 what little he had spss24 安装运行环境 ps图片搞笑 古言合集微盘 北京歌华有线客服电话 魔兽世界7.3出橙机制 驾照什么情况扣6分 mac pro 浏览器闪退

    All Right Reserved 知识库

    声明:本站内容源于网络,出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,请咨询相关专业人士。

    如果无意之中侵犯了您的版权,或有意见、反馈或投诉等情况 网站地图 网站栏目