1 代理模式概述:
代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理,以控制对这个对象的访问。代理模式的原理是将真实类的功能封装在被代理类中,使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
最基本的方式就是创建一个代理类,代理类实现和真实类相同的接口,并且在代理类中引用真实类的实例。这样就可以在不修改真实类代码的情况下,通过代理类来控制对真实类的访问。代理类还可以在调用真实类的方法前后添加一些额外的逻辑,来实现对真实类的访问控制、缓存、日志记录等功能。
2 静态代理
2.1 原理及应用介绍
通俗的讲,静态代理模式的初衷,就是为了让代码更好的进行解耦。将核心代码中,稳定不易变动的那一部分代码设为被代理类。其外围代码,因需求的不同需要不断更改代码与其适配的那部分代码写入代理类中,从而完成被代理类与代理类的解耦。为了让读者更方便理解静态代理模式,在次我举两个经典的例子辅助理解:
明星和经纪人:明星负责演戏,而他的经纪人就是他的代理,经纪人负责与制片公司谈演戏前后的相关事宜,比如合同签订,开具发票,结清尾款等工作,因为不同的制片公司,其流程不同,经纪人去适配各种不同的制片公司的流程并与其完成对接工作。而明星只需要专注于演戏本身即可,根据档期进行出演,无需因其他事情而费心劳力。
房东和房屋中介:房东负责提供房子,而他的房屋中介就是他的代理,房屋中介负责与租客进行谈租赁合同的签订,押金的交纳,退房检查,押金退款等相关工作。而房东只需要提供房子即可,租房前后等工作由房屋中介执行,因为不同的租客其偏好不同,有的租客对交通便利比较看重,有的租客对租金比较敏感,有的租客喜欢拧包入住,这些繁琐经常变更的事情,就由代理进行对接完成,而房东只需要提供房子即可。
2.2 实现静态代理
比如我们有一个生产耐克的工厂类,这个类专门负责生产耐克产品的核心工序,它作为真实类,即被代理类。为了生产一件完整的耐克产品,除了核心工序外,还需要进行前后很多繁琐的辅组工序,而且这些工序会因为工厂开设的国家和地区不同,为了符合当地的法规进行变更,并且随着时间推移,这些非核心工序还需要不断优化,因此把这些工序作为代理类进行封装。具体构建步骤如下。
2.2.1 构建接口
创建一个代理类和被代理类的公共接口,接口中拥有一个抽象方法
package stateProxy;
interface InterfaceFactory {
void produceNick();
}
2.2.2 创建真实类(被代理类)
创建真实类,并实现接口