什么是代理
举个栗子
比如有一家美国的大学,可以对全世界招生。但是对于家长来说,家长不能直接自己去找学校,家长没有能力去直接访问学校,或者说,美国学校不接受个人来访,那么此时就需要一个留学中介来帮助这家美国学校招
生,中介就是学校的代理。中介和学校要做的事情是一致:招生。对于家长来说,学校就是目标,留学中介就是代理。日常生活中,有许多代理的例子,比如:代购,房产中介,各种中介,换ip,商家厂家和买家。在开发中
也有同样的情况,比如,你有a类, 本来是调用c类的方法, 完成某个功能。 但是c不让a调用。 a -----不能调用 c的方法。在a 和 c 直接 创建一个 b 代理, c让b访问。 a --访问b---访问c。
原来的访问关系
通过代理的访问关系
什么是代理模式
百度百科
代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。
换句话说,使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现
的。当然,代理类与目标类要实现同一个接口。
实现代理的方式
静态代理
静态代理是指,代理类在程序运行前就已经定义好.java 源文件,其与目标类的关系在程序运行前就已经确立。在程序运行前代理类已经编译为.class 文件。
举一个静态代理的例子
需求:用户需要购买 u 盘,u 盘厂家不单独接待零散购买,厂家规定一次最少购买 1000个以上,用户可以通过淘宝的代理商,或者微商哪里进行购买。淘宝上的商品,微商都是 u 盘工厂的代理商, 他们代理对 u 盘的销售业
务。用户购买-------代理商(淘宝,微商)----- u 盘厂家(金士顿,闪迪等不同的厂家)
1、定义业务接口
定义业务接口UsbSell(目标接口),其中含有抽象方法sell(int amout);sell是目标方法
public interface UsbSell {
/**
* 表示功能的,厂家和商家都要完成的功能
* @param amount
* @return
*/
float sellUsb(int amount);
}
2、定义接口的实现类
目标类UsbKingFactory金士顿U盘,该类实现了接口
import school.xauat.service.UsbSell;
public class UsbKingFactory implements UsbSell {
@