博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰模式与代理模式
阅读量:6893 次
发布时间:2019-06-27

本文共 1114 字,大约阅读时间需要 3 分钟。

hot3.png

装饰模式:

定义:装饰模式以对客户端透明的方式动态扩展对象的功能(附加新的职责),是继承关系的一个替代方案。

角色:

  1)抽象构件角色(Component ):给出一个抽象接口,以规范接收附加责任的对象。

  2)具体构件角色(ConcreteComponent ):定义一个将要接受附加责任的类

  3)装饰角色(Decorator ):持有一个构件对象的实例,并定义一个与抽象构件一致的接口。

  4)具体装饰角色(ConcreteDecorator ):负责给构件对象贴上附加的责任。

特别注意:即装饰者和被装饰者具有相同的接口,这和代理模式很相似。

图:

 

 

意图:

把类中的装饰功能从类中移除,可以简化原有的类。

把类中的核心职责和装饰功能区分开来,而且可以去除相关类中重复的装饰逻辑。

动态添加对象到某个对象上。

缺点:

会导致比继承更多的对象,差错变得更加困难。

 

 

代理模式:

定义:为其他对象提供一种代理以控制对这个对象的访问。

角色:

1) 真实主题(ReadSubject):客户端实际要操作的对象。

  2) 代理(Proxy):代理中含有对真实主题(RealSubject) 的一个引用,可以对真实主题进行操作。

  3) 抽象主题(Subject):定义了真实主题和代理的共同操作的接口,这样在任何可以操作真实主题的地方也就可以操作代理。

图:

 

意图:

代理模式有效的向客户端屏蔽了附加行为细节,降低了客户端和系统之间的耦合度。

 

要点:

动态代理:

u     不用手工编写代理类;而是在运行时候动态生成;作用和手工生成的代理对象一致。

u     实现同一个接口:

u     创建java.lang.reflect.InvocationHandler,每个代理实例都有一个与它对应的InvocationHandler实例,就是一个方法拦截器。用以控制对某个对象的访问的拦截。

u     创建动态代理对象的步骤:

1)      指明一系列的接口来创建一个代理对象

2)      创建一个调用处理器Invocation handler 对象

3)      将这个代理指定为某个其他对象的代理对象

4)      在调用处理器的invoke()方法中采取代理,一方面将调用传递给真实对象,另一方面执行各种需要做的操作。

智能引用:

Java虚拟机对内存的管理能力是有限的,但有些应用又出于效率的考虑需要将一些较大的对象装载到内存中,为了保证虚拟机不会出现内存溢出,采用软引用,虚拟机在内存不够的时候能够回收较大的对象。采用智能引用能够保证一旦较大对象被回收后能够重新创建大对象保证客户端的正常使用。

转载于:https://my.oschina.net/longload/blog/710556

你可能感兴趣的文章
高效的生产力
查看>>
岁月划过生命线(从0到阿里)
查看>>
七招搞定微信朋友圈营销
查看>>
mysql 查看表
查看>>
Centos5 搭建独立版本库SVN
查看>>
云场景实践研究第6期:游族网络
查看>>
记录由Equal基础知识引起的内存泄露
查看>>
Android:Sensor传感器
查看>>
Eclipse配置实现定制登录界面
查看>>
NO.1 进入IT世界
查看>>
Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance
查看>>
Asp.net mvc 3.0新特性-浅析1
查看>>
Hadoop FSDataInputStream 流定位的例子
查看>>
在OWA页面中,增加忘记密码项
查看>>
vim 配置详解
查看>>
Samba文件共享服务(共享脚本 让你工作更轻松)
查看>>
shell学习之shell基础知识了解
查看>>
关于extjs控件的id和样式的研究
查看>>
Linux系统下关于ZIP命令的使用
查看>>
不同应用环境下会话保持方式的选择
查看>>