当前位置: 首页 > news >正文

大话设计模式---装饰模式

    装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

  如果只有一个ConcreteComponent类而没有抽象的Component类,那么Decorator类可以是ConcreteComponent的一个子类。同样道理,如果只有一个ConcreteDecorator类,那么就没有必要建立一个单独的Decorator类,而可以把Decorator和ConcreteDecorator的责任合并成一个类。

    总结:当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。

    装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了。

 

转载于:https://www.cnblogs.com/nixuebing/p/4191100.html

相关文章:

  • 利用EntityFramework获得双色球数据库
  • 2732: [HNOI2012]射箭( 半平面交 )
  • 消灭Bug!十款免费移动应用测试框架推荐
  • css引入讲解及media
  • oracle数据类型
  • 使用SQL Server Audit记录数据库变更
  • PHPCMS实现文章置顶功能的方法
  • 关于函数返回值的一些见解
  • Git 的是使用入门
  • Hover States - 有趣的用户界面及交互设计
  • JavaScript Array创建数组
  • C缺陷与陷阱----读书笔记---第一章
  • 利用firefox调试安卓手机端web
  • 笔记:Java面向对象编程 第10章 类的生命周期
  • 锁定应用,解锁应用,锁卡,解卡,更改密码指令
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017前端实习生面试总结
  • CentOS6 编译安装 redis-3.2.3
  • javascript数组去重/查找/插入/删除
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • python3 使用 asyncio 代替线程
  • Redis学习笔记 - pipline(流水线、管道)
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Webpack 4x 之路 ( 四 )
  • webpack+react项目初体验——记录我的webpack环境配置
  • 将 Measurements 和 Units 应用到物理学
  • 目录与文件属性:编写ls
  • 区块链将重新定义世界
  • 微信支付JSAPI,实测!终极方案
  • 我与Jetbrains的这些年
  • 译米田引理
  • Linux权限管理(week1_day5)--技术流ken
  • # .NET Framework中使用命名管道进行进程间通信
  • #pragma预处理命令
  • $.ajax,axios,fetch三种ajax请求的区别
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C++)八皇后问题
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (笔试题)分解质因式
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (五)c52学习之旅-静态数码管
  • (转)setTimeout 和 setInterval 的区别
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net core Swagger 过滤部分Api
  • .NET MVC 验证码
  • .NET Reactor简单使用教程
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法