装饰器模式展示

在学习设计模式的过程中,将自己对于设计模式的理解,以最简单,最白话的方式,分享给大家。个人觉得,对于设计模式的理解,需要将他从最抽象的理论里,真实的代入到实际的业务场景中,将会有最深刻的理解。所以文章最有对这个设计模式的使用的拓展,讲述了背后的意义。

  • 场景一(先来假设一个最最最开始、最基本的模型基础)

    • 英雄(Hero)这个类只有名字属性

      那么这个类就很容易构造,在对外展示的时候,只需要调用display()方法,展示的就只有姓名了

      public abstract class Hero {protected String name;//名字Hero(String name) {this.name = name;}void display(){System.out.println("My name is :" + name);};}
      • 在这个类下生成两个实体类,叫Annie(安妮)和Gaylen(盖伦)
Hero
Gaylen
Annie

Gaylen(盖伦)

public class Gaylen extends Hero {    Gaylen(){super("Gaylen");}
}

Annie(安妮)

public class Annie extends Hero {Annie() {super("Annie");}
}
  • 场景一的使用方法 非常的简单,简单的展示就好了

      public static void main(String[] args) {Hero gaylen = new Gaylen();Hero annie = new Annie();gaylen.display();annie.display();}
    

    输出结果也很容易

    My name is :Gaylen
    My name is :Annie
    

[================================================================================]

接下来进入主题

  • 场景二: 产品经理叫我新增一个叫做皮肤的属性

如果这个时候这个英雄出皮肤了(也就是可以换不同的外观了),我们们应该怎么改这个结构呢?

思考角度:其实按照普通的做法,我们就会直接在Hero类上面,增加一个 Clothes属性,然后在display()方法里面,将Clothes给加进展示就好了。

新增的clothes的类属性如下:

public abstract class Clothes {private String clothesName;//衣服名称void display(){System.out.println("the clothes is " + clothesName);};
}

然后给这个服饰新增两个实体类Skirt(裙子)和TShirt(T恤)

public class TShirt extends Clothes{TShirt(){this.clothesName = "TShirt";}
}
public class Skirt extends Clothes{Skirt(){this.clothesName = "Skirt";}
}
Clothes
Skirt
TShirt

不使用装饰器模式的写法之【添加字段】

白话设计模式-装饰器模式的使用和意义相关推荐

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

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

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

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

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

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

  4. Java设计模式-装饰器模式 理论代码相结合

    继Java设计模式适配器模式后的装饰器模式来啦,让我们一起看看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一 ...

  5. 设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.简单来说,装饰器模式就是 ...

  6. PHP设计模式——装饰器模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 装饰器模式又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装 ...

  7. 设计模式-装饰器模式 C++

    一.简介 1.什么是装饰器模式 装饰器模式是结构型设计模式. 装饰器是现有类的一个包装,可以在不修改现有类且不增加子类的情况下扩展现有类. [注]可以实现向一个现有对象添加新的功能,同时又不改变其结构 ...

  8. 设计模式---装饰器模式(C++实现)

    装饰器模式(Decorator Pattern)允许向一个现有对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...

  9. C++设计模式 装饰器模式

    文章目录 1. 先验知识 2. 装饰器模式相关概念 3. 装饰器模式的应用 3.1 应用1: 给形状添加新的特征 不同形状加红 3.2 应用2: 给一个人穿不同的衣服 a 直接person类, 增加穿 ...

最新文章

  1. 课后习题代码持续更新。。。。。。。。。。。。。
  2. 研华物联网论坛和ARM技术研讨会随笔
  3. php模拟getua_php实现进行远程抓取百度网页内容,并伪装服务器端ip
  4. 操作系统 第四章【存储器管理】【MOOC答案】
  5. 【机器视觉】 dev_set_lut算子
  6. Redis缓存击穿和缓存雪崩、缓存穿透以及对应的解决方案
  7. 行向量,列向量,行主序矩阵,列主序矩阵
  8. linux连接池等待时间,LINUX系统下解决time_wait 连接数过多问题
  9. win 二进制门安装mysql_PG二进制包编译Windows下mysql_fdw
  10. 二维卷积神经网络的结构理解
  11. 关于 XHTML 1.0 Transitional//EN 下的Relative问题
  12. 软件测试中的缺陷分析与管理
  13. Javaweb安装教程
  14. 银行面试之MySQL数据库
  15. 程序员客栈 接不到单子_常见(但不常见)单子
  16. 第17天 命令行窗口
  17. java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener
  18. 微信小程序文件下载及在线打开指定文档,解压Zip格式压缩包
  19. 爬虫3 requests基础2 代理 证书 重定向 响应时间
  20. IIS服务器开启https

热门文章

  1. python画大象_Python Day20
  2. Java基础篇 | Java开发环境的搭建
  3. Java开发环境搭建:Windows
  4. 2019微信公开课PRO:百果园获 “年度智慧服务”奖
  5. php将数组变成字符串,php怎样将数组转成字符串
  6. leetcode171. Excel表列序号
  7. flac格式怎么转换成mp3?
  8. VIM快捷键大全(附图片一张)
  9. comodo多域名证书是什么样的证书
  10. Lubuntu精简记录