装饰器模式,代理模式
2015-08-07 23:07
246 查看
装饰器模式:动态地给一个对象添加一些额外的职责或者行为。就增加功能来说,比继承的方式更灵活。
情景:可以通过继承现有对象,对一个已经存在的对象增加行为,但是这样无法控制增加行为的时机和方式。如果可能存在对一个类,不断的增加行为,需要不断的继承,将增加代码管理难度。
适用性:
1:在不影响其他对象的情况下,以动态、透明的方式给对象添加职责。
2:在某个行为的之前或者之后增加行为。例如在某个行为处理数据的前后适用装饰器模式过滤数据。
模式组成结构:
1、抽象组件角色(Component):定义一个对象接口,该接口可以给对象动态增加职责。
2、具体组件角色(ConcreteComponent):被装饰者,定义一个将要被装饰增加功能的类,功能上相当于客户类。
3、抽象装饰器(Decorator):维持一个指向Component的实例,这个实例就是具体组件角色(ConcreteComponent)
4、具体装饰器(ConcreteDecorator):添加职责功能
以上内容只是理论,具体的代码训练,可以去网上找有趣的案例进行训练,个人代码不上传。推荐训练链接:http://www.cnblogs.com/justinw/archive/2007/06/11/779356.html
代理模式:为其他对象提供一种代理,并控制这个对象的访问。B跟C是朋友,A和B是朋友,A喜欢喜欢B,A不能直接访问C,通过B就是A的代理。
适用场景:
1:远程代理:Proxy类中转换不同地址的编码请求。
2:虚拟代理:Proxy类中缓存实体信息,延迟对实体的访问。
3:保护代理:Proxy类中检查访问是否达到权限。
4:智能指引:Proxy类中设置引用对象
5:Copy-On-Write代理:
5种场景中情形都类似上面提到过的A、B与C的关系,不同的是代理内中接口中行为方式不同。
模式组成:
1:抽象主题角色(SubJect): Proxy 和 RealSubject公共接口
2:代理角色(Proxy):保存一个RealSubject实例的引用,控制实体的操作。
3:真实主题角色(RealSubject):定义了代理角色所代表的真实对象。
以上内容只是理论,具体的代码训练,可以去网上找有趣的案例进行训练,个人代码不上传。推荐训练链接:http://blog.csdn.net/hguisu/article/details/7542143
本文纯属个人学习总结,篇幅的大部分内容都来源于网络,也包含个人逻辑思维和开发经验。每个人的水平、层次、出发点不同,看客可能存在一定的误解,有写的不好的地方希望看客能共同交流。
情景:可以通过继承现有对象,对一个已经存在的对象增加行为,但是这样无法控制增加行为的时机和方式。如果可能存在对一个类,不断的增加行为,需要不断的继承,将增加代码管理难度。
适用性:
1:在不影响其他对象的情况下,以动态、透明的方式给对象添加职责。
2:在某个行为的之前或者之后增加行为。例如在某个行为处理数据的前后适用装饰器模式过滤数据。
模式组成结构:
1、抽象组件角色(Component):定义一个对象接口,该接口可以给对象动态增加职责。
2、具体组件角色(ConcreteComponent):被装饰者,定义一个将要被装饰增加功能的类,功能上相当于客户类。
3、抽象装饰器(Decorator):维持一个指向Component的实例,这个实例就是具体组件角色(ConcreteComponent)
4、具体装饰器(ConcreteDecorator):添加职责功能
以上内容只是理论,具体的代码训练,可以去网上找有趣的案例进行训练,个人代码不上传。推荐训练链接:http://www.cnblogs.com/justinw/archive/2007/06/11/779356.html
代理模式:为其他对象提供一种代理,并控制这个对象的访问。B跟C是朋友,A和B是朋友,A喜欢喜欢B,A不能直接访问C,通过B就是A的代理。
适用场景:
1:远程代理:Proxy类中转换不同地址的编码请求。
2:虚拟代理:Proxy类中缓存实体信息,延迟对实体的访问。
3:保护代理:Proxy类中检查访问是否达到权限。
4:智能指引:Proxy类中设置引用对象
5:Copy-On-Write代理:
5种场景中情形都类似上面提到过的A、B与C的关系,不同的是代理内中接口中行为方式不同。
模式组成:
1:抽象主题角色(SubJect): Proxy 和 RealSubject公共接口
2:代理角色(Proxy):保存一个RealSubject实例的引用,控制实体的操作。
3:真实主题角色(RealSubject):定义了代理角色所代表的真实对象。
以上内容只是理论,具体的代码训练,可以去网上找有趣的案例进行训练,个人代码不上传。推荐训练链接:http://blog.csdn.net/hguisu/article/details/7542143
本文纯属个人学习总结,篇幅的大部分内容都来源于网络,也包含个人逻辑思维和开发经验。每个人的水平、层次、出发点不同,看客可能存在一定的误解,有写的不好的地方希望看客能共同交流。
相关文章推荐
- 依附品牌做代理 把握创业新机遇
- 代理区独立模式的说明
- http代理相关知识分析
- JavaScript的事件代理和委托实例分析
- asp代理采集的核心函数代码
- nginx 1.0.0配ngx_cache_purge实现高效的反向代理
- C#装饰者模式实例分析
- java实现动态代理方法浅析
- 用Python编写脚本使IE实现代理上网的教程
- 在python中的socket模块使用代理实例
- 仅用50行Python代码实现一个简单的代理服务器
- Python实现检测代理IP是否可以翻墙
- 在Nginx中拦截特定用户代理的教程
- 使用Nginx做WebSockets代理教程
- Windows下用Nginx代理Django安装配置实例
- 在VPS搭建自己的http代理服务器
- socks5 代理
- nginx学习总结五(nginx反向代理)
- linux命令行界面设置代理方法