白话设计模式-装饰器模式的使用和意义
装饰器模式展示
在学习设计模式的过程中,将自己对于设计模式的理解,以最简单,最白话的方式,分享给大家。个人觉得,对于设计模式的理解,需要将他从最抽象的理论里,真实的代入到实际的业务场景中,将会有最深刻的理解。所以文章最有对这个设计模式的使用的拓展,讲述了背后的意义。
场景一(先来假设一个最最最开始、最基本的模型基础)
英雄(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(盖伦)
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";}
}
不使用装饰器模式的写法之【添加字段】
白话设计模式-装饰器模式的使用和意义相关推荐
- Python设计模式-装饰器模式
Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...
- Go 设计模式 - 装饰器模式
装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...
- Spring设计模式(装饰器模式)
Spring设计模式(装饰器模式) 模式的定义: 装饰者模式定义: 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 模式的结构图 : 模式包含角 ...
- Java设计模式-装饰器模式 理论代码相结合
继Java设计模式适配器模式后的装饰器模式来啦,让我们一起看看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一 ...
- 设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.简单来说,装饰器模式就是 ...
- PHP设计模式——装饰器模式
声明:本系列博客参考资料<大话设计模式>,作者程杰. 装饰器模式又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装 ...
- 设计模式-装饰器模式 C++
一.简介 1.什么是装饰器模式 装饰器模式是结构型设计模式. 装饰器是现有类的一个包装,可以在不修改现有类且不增加子类的情况下扩展现有类. [注]可以实现向一个现有对象添加新的功能,同时又不改变其结构 ...
- 设计模式---装饰器模式(C++实现)
装饰器模式(Decorator Pattern)允许向一个现有对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...
- C++设计模式 装饰器模式
文章目录 1. 先验知识 2. 装饰器模式相关概念 3. 装饰器模式的应用 3.1 应用1: 给形状添加新的特征 不同形状加红 3.2 应用2: 给一个人穿不同的衣服 a 直接person类, 增加穿 ...
最新文章
- 课后习题代码持续更新。。。。。。。。。。。。。
- 研华物联网论坛和ARM技术研讨会随笔
- php模拟getua_php实现进行远程抓取百度网页内容,并伪装服务器端ip
- 操作系统 第四章【存储器管理】【MOOC答案】
- 【机器视觉】 dev_set_lut算子
- Redis缓存击穿和缓存雪崩、缓存穿透以及对应的解决方案
- 行向量,列向量,行主序矩阵,列主序矩阵
- linux连接池等待时间,LINUX系统下解决time_wait 连接数过多问题
- win 二进制门安装mysql_PG二进制包编译Windows下mysql_fdw
- 二维卷积神经网络的结构理解
- 关于 XHTML 1.0 Transitional//EN 下的Relative问题
- 软件测试中的缺陷分析与管理
- Javaweb安装教程
- 银行面试之MySQL数据库
- 程序员客栈 接不到单子_常见(但不常见)单子
- 第17天 命令行窗口
- java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener
- 微信小程序文件下载及在线打开指定文档,解压Zip格式压缩包
- 爬虫3 requests基础2 代理 证书 重定向 响应时间
- IIS服务器开启https
热门文章
Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...
装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...
Spring设计模式(装饰器模式) 模式的定义: 装饰者模式定义: 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 模式的结构图 : 模式包含角 ...
继Java设计模式适配器模式后的装饰器模式来啦,让我们一起看看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一 ...
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.简单来说,装饰器模式就是 ...
声明:本系列博客参考资料<大话设计模式>,作者程杰. 装饰器模式又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装 ...
一.简介 1.什么是装饰器模式 装饰器模式是结构型设计模式. 装饰器是现有类的一个包装,可以在不修改现有类且不增加子类的情况下扩展现有类. [注]可以实现向一个现有对象添加新的功能,同时又不改变其结构 ...
装饰器模式(Decorator Pattern)允许向一个现有对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...
文章目录 1. 先验知识 2. 装饰器模式相关概念 3. 装饰器模式的应用 3.1 应用1: 给形状添加新的特征 不同形状加红 3.2 应用2: 给一个人穿不同的衣服 a 直接person类, 增加穿 ...