java设计模式03装饰者者模式
2024-09-06 09:06:36
动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。
(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
(2)处理那些可以撤消的职责。
(3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
最经典的莫过于java的io流结构设计
对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。此外,不论我们使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法。
然而,实际上,在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。
我们可以用另外一句话来总结这些差别:使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
最新文章
- 基于vue2.0的分页组件开发
- 论文笔记之:Learning to Track: Online Multi-Object Tracking by Decision Making
- vnext 技术两篇文章和评论
- python FTP上传和下载文件
- lintcode:数飞机
- 51nod1265四点共面
- PMBOK 和 PRINCE2的技术不同的地方是什么
- Java Listener pattern 监听者模式
- php精简完全小结(linux/laravel篇)
- mybatis-java代码调用部分
- 【转载】Pytorch tutorial 之Datar Loading and Processing
- Python_day8
- 如何在C#中使用Dapper(译)
- npm和yarn的区别
- python中的全局变量和局部变量(转)
- (原创)用C++11的std::async代替线程的创建
- 快速切题 poj1129 Channel Allocation
- 编译Android VNC Server
- 我的 Delphi 学习之路 —— Delphi 的安装
- JAVA数据类型中的char类型
热门文章
- [bzoj3809]Gty的二逼妹子序列_莫队_分块
- Spring-data-jpa 笔记(二) Repository 详解
- System.out.print()思考?
- Ubuntu 16.04粘贴板增强工具Parcellite
- Android: MediaRecorder start failed
- symfony2笔记
- BEGINNING SHAREPOINT&;#174; 2013 DEVELOPMENT 第12章节--SP 2013中远程Event Receivers
- POJ 1741 Tree 树形DP(分治)
- 【POJ 3190】 Stall Reservations
- linux下的so、o、lo、a、la文件的区别