装饰者模式

装饰者模式

假设现在有一块蛋糕,加上奶油就是奶油蛋糕,再加上巧克力就是巧克力奶油蛋糕,再要是加上水果,就是巧克力水果奶油蛋糕,当然我们也可以做水果奶油蛋糕。这就是装饰的过程。

几大roles

  • Componet (被装饰者接口/抽象类) 就是蛋糕的API
  • ConcreteComponent (具体的被装饰者) 具体蛋糕
  • Decorator (装饰者接口/抽象类) 同样继承/实现被装饰者 装饰物
  • ConcreteDecorator (具体装饰者) 由奶油/巧克力/水果...来扮演

UML图:
图片说明

优点

  • 接口(API)的透明性
    装饰物和装饰对象都继承了Component类,说明装饰物和装饰对象具有一致性,也就是即使被装饰过的装饰对象还能继续被装饰。就像剥洋葱一样,一层一层的皮就是装饰物,而尽管有很多层皮,它还是洋葱。
  • 在不改变装饰对象的前提下增加功能
    因为具有相同的API,所以我们可以递归装饰,比如蛋糕被奶油装饰过变成奶油蛋糕,巧克力再对奶油蛋糕进行装饰变成了巧克力奶油蛋糕,装饰越多,功能越多,而我们也不需要对被装饰的类进行任何的修改。

应用场景

java.io包中的类就运用到了装饰者模式。
比如,我们先生成一个读取文件的实例 Reader reader = new FileReader("datafile.txt");
我们也可以在读取文件时将文件内容放入缓冲区 Reader reader = new BufferedReader(new FileReader("datafile.txt"););

全部评论

相关推荐

12-20 11:21
复旦大学 Java
点赞 评论 收藏
分享
专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务