简易理解设计模式之:装饰模式——穿衣服经典案例
介绍:
装饰模式属于结构型模式。它动态地给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
类图:
Component(抽象组件):接口或者抽象类,被装饰的最原始的对象。
ConcreteComponent(具体组件):实现抽象组件的接口。
Decorator(抽象装饰角色):一般是抽象类,持有一个被装饰者的引用,用来调用被装饰者的方法,同时可以给被装饰者增加新的职责。
ConcreteDecorator(具体装饰类):抽象装饰角色的具体实现。
用法:
• 当不适合采用继承的方式对系统进行新增功能时。
• 需要透明且动态地扩展类的功能时。
按照以上两点,个人理解翻译一下:
• 不适合用继承扩展的情况有哪些呢?假设有Parent、Child、GrandChild三个类,我需要扩展其中的Child类很明显用继承不合适,因为可能会影响到GrandChild;又或者用继承的方法会令到子类的数量暴增并且可能存在大量重复代码,造成代码臃肿。
• 所谓动态,就是给一个对象添加一些额外的职责,同时也可以动态取消,实现功能的动态组合;所谓透明,要给一个对象增加功能,但是不能让这个对象知道,也就是不能去改动这个对象。
例子:
装饰模式应用广泛,例如Java I/O标准库的设计就是Java语言中的最著名的例子。而这次我们参考《大话设计模式》书中,穿衣服的经典案例。
众所周知,人会根据不同的场合穿着不同的衣服。就以男人为例,上班时会着装正式(领带、衬衫、外套、西裤、皮鞋、手表等),睡觉时会穿舒适(睡衣、睡裤等),运动时会穿运动服(T恤衫、运动裤、运动鞋等)。
需求:输出男人在以上三种场合的着装要求
1、原始代码
新手写代码很容易写成把所有的衣服都放在一个类里面,我们先看一下没有用任何涉及模式的例子:
1.1、新建一个男人类
http://www.taodudu.cc/news/show-5339636.html
相关文章:
- 英文衣服大全
- 衣服去污指南
- 带你看看品牌服装的销售员如何卖衣服
- 关于衣服,学习一下
- 穿衣服的学问
- 装饰模式-衣服穿着设计
- 程序员都是怎么买衣服的
- 团建小游戏穿衣服
- 如何洗衣服
- C++:实现量化OptionletStripper测试实例
- Java解析 PDF
- dva学习--在组件中dispatch一个action
- 【爬虫学习】BeautifulSoup 学习心得
- Java使用 PDFBox 2.0 从 PDF 文档中读取所有文本
- java pdfbox读取pdf中的表格
- java实现 pdf转word
- 如何利用pdfbox将pdf解析为txt
- 用pdfbox获取pdf内容及座标
- 【纯净软件】三款照片EXIF信息删除软件 Clear Exif、JPEG PNG Stripper、Easy Exif Delete 非专业横向对比...
- [游戏技术]求生之路stripper:source游戏中创建模型
- [游戏技术] Stripper:source地图事件说明
- 主题:美剧职场口语:关于“妓女”的词儿种种
- PDFBox解析PDF文档
- VTK笔记-使用vtkCutter类对多边形取切面轮廓
- 杰里之动态切换手机或者蓝牙接听电话】【篇】
- Android_Phone源代码接听电话流程解读
- Android 8.1 9.0 10.0 拨打接听电话默认开启免提
- Android开发——短信电话拦截/接听电话
- Android拨打接听电话自动免提
- 小米手机无法接听电话的解决方案
简易理解设计模式之:装饰模式——穿衣服经典案例相关推荐
- 简易理解设计模式之:桥接模式——穿衣服经典案例2
介绍: 桥接模式属于结构型模式.它的定义为:将抽象部分与实现部分分离,使它们都可以独立的变化. 类图: Abstraction(抽象化角色):抽象部分,保持对实现部分对象的引用,抽象部分中的方法需要调 ...
- 简易理解设计模式之:责任链模式——OA中请假流程示例
介绍: 责任链模式属于行为型设计模式.它的定义为:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止. 类图: ...
- python 图片识别服装_[Python设计模式] 第6章 衣服搭配系统——装饰模式
题目 设计一个控制台程序,可以给人搭配嘻哈风格(T恤,垮裤,运动鞋)或白领风格(西装,领带,皮鞋)的衣服并展示,类似QQ秀那样的. 基础版本 class Person(): def __init__( ...
- 换种思路去理解设计模式
1 前言 看过许多关于设计模式的博客,也读过关于设计模式的书.几乎所有的介绍的开头,直接就引入了"设计模式"或者"某某模式".设计模式到底是因什么而来?这是一个 ...
- 设计模式 C++装饰模式
买了新房(毛坯房)需要装修,对新房进行装修并没有改变房子用于居住的本质,但它让房子变得更漂亮,更加满足居家的需求.在软件设计中,我们也可以用类似的技术对原有对象(新房)的功能进行扩展(装修),以获得更 ...
- 设计模式(十)—— 装饰模式(定义、案例分析、特点、缺点)
文章目录 前言 正文 一.定义 二.情景假设 三.情景分析 四.模式结构及分析 (一) 两种装饰模式 (二) 两种组合模式的总结 (三) 模式分析 (1) 模式特点 (2) 模式缺点 五.使用情景 六 ...
- 快速、深入理解设计模式的what、why、how
工作很久,看过很多代码,看过很多源码,发现大部分人对设计模式的理解有偏差,我将从以下几个角度对设计模式进行详细介绍. 设计模式是什么 设计模式是一种思想,一种结构,一种优秀的思考模式.类比建房子的设计 ...
- 深入理解设计模式-单例模式(饿汉单例模式、懒汉单例模式、双锁单例模式)
深入理解设计模式-双锁单例模式 文章目录 一.什么是单例模式 二.应用场景 三.优缺点 四.代码实现 总结 结尾 一.什么是单例模式 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个 ...
- 朋友圈发图多大不会被压缩_穿衣搭配:会穿衣服和不会穿衣服的女生,差距有多大 ?!...
今天就来教小可爱们 一些炒鸡实用的穿衣搭配小技巧 留意到这些能让你衣品快速提升! 随着泫雅风的流行 各种小圆领的贴身短上衣真是火到不行 搭配高腰裤,腿长一米八可真不是吹的 但直面现实后就会发现 小圆领 ...
最新文章
- XML专题:使用NSXMLParser解析xml文件
- python中文件读写位置的作用-Python中文件的读写
- hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余)
- 002_Container布局容器
- saltstack安装
- .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
- 了解有关JDK9紧凑弦乐的信息(视频回顾Charlie Hunt)
- jquery-属性操作
- 使用Python可以做些什么
- 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
- 小牛电动为何沉迷于打造“社区文化”?
- 计算机无线鼠标重启才能连上,无线鼠标电脑重启后无反应
- 清华大学计算机专业辅修课程,清华大学计算机应用专业-辅修专业
- 一篇读懂深度学习中「训练」和「推断」的区别
- Exchange Server 2016下载链接
- ddk开发基础 makefile和source文件
- AJAX异步判断注册用户名是否重复
- SPI方式读取汉字字库芯片
- 批量修改文件名字、不同的目录下
- 网络编程面试题:OSI模型是什么?/OSI模型介绍