读书笔记—Head First 设计模式— 装饰者模式

装饰者模式(Decorator Pattern)

装饰者模式——动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

所谓装饰者模式,包含两个对象,一个为装饰者,一个为被装饰者。装饰者、被装饰者拥有相同的父类,装饰者通过构造函数获取被装饰者的对象并在被装饰者的基础上重新修饰它,再将自己赋给需要的用户。利用此模式层层包含以达到多级修饰的效果。
好,下面上代码。

import java.util.ArrayList;abstract class Food {ArrayList<String> fdName;ArrayList<String> getfdDescription() {return fdName;}abstract double cast();
}abstract class supplementaryFood extends Food{abstract ArrayList<String> getfdDescription();
}class Rice extends Food {public Rice() {// TODO Auto-generated constructor stubArrayList<String> a = new ArrayList<String>();a.add("Rice");this.fdName = a;}@Overridedouble cast() {// TODO Auto-generated method stubreturn 1;}}class Eggs extends supplementaryFood {Food food;Eggs(Food food){this.food = food;}@OverrideArrayList<String> getfdDescription() {// TODO Auto-generated method stubthis.fdName = food.getfdDescription();this.fdName.add("eggs");return this.fdName;}@Overridedouble cast() {return 2 + food.cast();// TODO Auto-generated method stub}}public class Decorator {public static void main(String[] args) {// TODO Auto-generated method stubFood myFood;myFood = new Rice();System.out.println(myFood.getfdDescription()+" "+myFood.cast());myFood = new Eggs(myFood);System.out.println(myFood.getfdDescription()+" "+myFood.cast());        }}

我设计了一个共同的父类Food类,并设计了它的子类抽象类副食类(supplementaryFood)通过利用特有的副食类型来修饰Food类型的食物,我设计的例子不是一个特别好的例子,纯粹是为了展示装饰者模式的用法。
其中有一点要说的是,我将他们食物的名字用一个ArrayList存放,虽然我这次写的类中并没有特别去展现它的意思,这主要是为了在之后的使用中方便去管理食物的名字,检测是否有重复可以变成Double,如果要改变输出格式也会更方便一些。

我这次所写的装饰者模式在真正的使用中会存在两个问题,一是设计类时如何分类,二是大量的小类如何管理。我认为如果我来用的话肯定不会单纯的只用装饰者模式而是与其他模式相结合的使用。

我在设计模式这方面还很年轻,如果以后有新的理解会返回来及时更新滴。
附上类图一副。

读书笔记---Head First 设计模式--- 装饰者模式相关推荐

  1. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  2. [Head First设计模式]山西面馆中的设计模式——装饰者模式

    原文:[Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 在山西面馆吃鸡蛋面的时候突然想起装饰者这个模式,觉得面馆这个场景跟书中的星巴兹咖啡的场景很像,边吃边思考装饰者模式.这里 ...

  3. 设计模式——装饰者模式

    本文是阅读 Head First 设计模式--装饰者模式的总结. 这本书的教学模式很不错,个人很喜欢,由实际的案例由浅入深,循序渐进的让你明白良好的设计是多么的优雅迷人(回头看看自己的代码,WTF!) ...

  4. 设计模式装饰者模式_装饰者模式如何拯救了我的一天

    设计模式装饰者模式 在工作中,我正在处理庞大的Java代码库,该代码库是由许多不同的开发人员在15年的时间里开发的. 并不是所有的事情都由书来完成,但是同时我通常无法重构遇到的每一个奇怪的事物. 尽管 ...

  5. 23种设计模式——装饰者模式

    文章目录 23种设计模式--装饰者模式 1.装饰者模式概述 2.装饰者模式的结构 3.装饰者模式的实现 4.装饰者模式的应用场景 23种设计模式--装饰者模式 1.装饰者模式概述 背景 有些人为了早上 ...

  6. Go 设计模式 - 装饰器模式

    装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...

  7. 10. 设计模式-装饰者模式

    文章目录 设计模式-装饰者模式 1. 案例引出装饰者模式 2. 装饰者模式 2.1 装饰者模式定义 2.2 装饰者模式原理 2.3 装饰者模式解决星巴克咖啡订单问题 2.4 代码实现 抽象类Drink ...

  8. Spring设计模式(装饰器模式)

    Spring设计模式(装饰器模式) 模式的定义: 装饰者模式定义: ​ 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 模式的结构图 : 模式包含角 ...

  9. java/android 设计模式学习笔记(7)---装饰者模式

    这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是 ...

最新文章

  1. 四个月没返校,挂在宿舍的内裤变“鸟窝”,网友:画面太美,不敢面对
  2. Spring boot+Spring Security 4配置整合实例
  3. wxpython 按钮跳notebook_按钮按下wxpython刷新窗口
  4. 文档声明和HTML样式表
  5. 使用SIFT匹配金馆长表情包
  6. 谷歌发布MetNet神经网络模型预测天气
  7. dom影像图形成数字地形图_航测相关知识点——鲲鹏智汇承接航测相关任务
  8. 关于用LM2596做的DC-DC数控电源
  9. 2013年度CSDN十大博客之星
  10. Cloudera:开放式数据湖仓,释放数据分析潜力
  11. web全栈工程师(前端进阶)学习线路图
  12. The Fun Of Algorithm - Day4 - 百钱百鸡问题
  13. 为什么 Redis 单线程却能支撑高并发?
  14. SDWAN组网典型应用
  15. 一文读懂网站SEO优化国际版
  16. opensource项目_宣布2018年Opensource.com社区奖获奖者
  17. antd table 设置固定高度
  18. 大鱼吃小鱼游戏代码 基于java-swing
  19. java实现excel导入导出(jxl),Java入门你值得拥有
  20. Flutter 学习第三天 面向对象 和 库的使用

热门文章

  1. 7-85 根据输入的空气污染指数,输出相应的信息。7-86 分支结构——大小写字母判断7-87 A±B
  2. static定义静态方法
  3. DCM4CHE实现DICOM的C-STORE --STORESCP
  4. uoni扫地机器人好用吗_由利Uoni扫地机器人V980 MAX好用吗?详细测评告诉你
  5. 计算机基础考点笔记-1
  6. 2019年清华大学827电路原理考研经验分享
  7. 【六袆 - linux】docker 第二次运行容器;docker第二次运行mysql容器;docker第二次启动mysql;
  8. qduoj 韬韬与炉石传说
  9. 如何提取论文中的表格数据(pdf转换excel)
  10. layout_constraintWidth_percent in java