文档章节

装饰模式与代理模式

longload
 longload
发布于 2016/07/12 17:48
字数 776
阅读 2
收藏 0

装饰模式:

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

角色:

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

© 著作权归作者所有

共有 人打赏支持
longload
粉丝 3
博文 66
码字总数 104702
作品 0
成都
程序员
私信 提问
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
Java之23种设计模式解析(二)

B、结构模式(7 种) 我们接着讨论设计模式,上篇文章我讲完了 5 种创建型模式,这章开始,我将讲下 7 种结构型模式:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模...

wersdffg
2015/02/15
0
0
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
JavaScript常用设计模式

设计模式 设计模式是一种在长时间的经验与错误中总结出来可服用的解决方案。 设计模式主要分为3类: 创建型设计模式:专注于处理对象的创建 Constructor构造器模式,Factory工厂模式,Singl...

a独家记忆
2018/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
今天
3
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
今天
113
7
租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
4
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
6
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部