您的位置:首页 > 编程语言 > Java开发

Java结构型设计模式——适配器模式、代理模式

2017-12-29 15:31 375 查看
一、结构性模式

——核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的 类结构,用来解决更大的问题。

——分类:

*适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式

二、适配器模式(adapter)

(1)什么是适配器模式?

——将一个类的接口转换为客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

(2)适配器模式中的角色

——目标接口(Target):客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口。

——需要适配的类(Adaptee):需要适配的类或适配者类。

——适配器(Adapter):通过包装一个需要适配的对象,把原接口转换为目标接口。

三、适配器模式在工作中的场景

——经常用来做旧系统的改造和升级

——如果我们的系统开发之后再也不需要维护,那么很多模式都是没用的,但是不巧的是,现实中我们维护一个系统的代价往往是开发一个系统的数倍。

四、我们学习中经常能见到适配器的场景

——Java.io.InputStreamReader(InputStream is)

——Java.io.OutputStreamWriter(OutputStream os)

五、代理模式(Proxy pattern)

——核心作用:

*通过代理,控制对对象的访问!

可以详细的控制访问某个类或者某个对象的方法,在调用这个方法前做的处理,调用这个方法后做后置处理。(AOP的围观实现!)

——AOP(Aspect Oriented Programming面向切面编程)的核心机制!

六、代理模式的核心角色

——抽象角色:定义代理角色和真实角色的公共对外的方法

——真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。(关注真正的业务逻辑!)

——代理角色:实现抽象的角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(将统一的流程控制放到代理角色中处理!)

七、代理模式的运用场景

——安全代理:屏蔽对真实角色的访问。

——远程代理:通过代理类处理远程方法的调用(RMI)

——延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。

八、代理角色的分类

——静态代理(静态定义代理类)

——动态代理(动态生成代理类)

*JDK自带的动态代理

*javaassist字节码操作库实现

*CGLIB

*ASM(底层使用指令,可维护性差)

九、动态代理相比较于静态代理的优点:

——抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的地方去处理,这样,我们可以更加灵活和统一的处理众多的方法

十、动态代理(JDK自带的实现)

——java.lang,reflect.Proxy

作用:动态生成代理类和对象

——java.lang.reflect.InvocationHandler(处理器接口)

*可以通过invoke方法实现对真实角色的代理访问。

*每次通过Proxy生成代理类对象时都要指定对应的处理类对象

十一、代理模式在开发框架中的应用场景

——struts2中的拦截器的实现

——数据库连接池关闭管理

——Hibernate中延时加载的实现

——mybatis中实现拦截器插件

——Aspect的实现

——spring中AOP的实现

*日志拦截

*声明式事务处理

——web service

——RMI远程方法调用

十二、面向切面编程简介

——AOP(Aspect-Oriented Programming)面向切面编程

*它是可以通过预编译方式和运行期动态代理实现在不修改源代码的前提下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP编程的一种补充。

——常用的术语

*切面(Aspect):其实就是共有功能的实现。

*通知(Advice):是切面的具体实现。

*连接地(Joinpoint):用于定义同知应该切入到哪些连接点上。

*目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。

*代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象

*织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息