所谓代理,其实是代替原生对象做一些更多的事情或者屏蔽掉原生对象的一些功能,举个简单例子,我们可以去火车站买票,也可以去代理售票掉买票,代理售票点提供了一些更丰富的功能,比如提供免费茶水,提供无线网络,但是代理售票点不能退票。这就是现实中的代理现象。JAVA中的代理其实也就是这个意思。下面我们看看代理售票的这个过程用JAVA怎么实现。
首先我们创建一个售票接口
package com.springAop;
public interface Ticket {
//售票
public void SaleTicket();
}
实现售票功能
package com.springAop;
public class TicketOffice implements Ticket {
public void SaleTicket() {
// TODO Auto-generated method stub
System.out.println("售卖火车票");
}
}
创建一个代理,代理在售票的同时,可以提供免费茶水,提供无线网络
package com.springAop;
public class ProxyTicket implements Ticket {
private TicketOffice ticketOffice;
public ProxyTicket(TicketOffice ticketOffice)
{
this.ticketOffice=ticketOffice;
}
public void SaleTicket() {
// TODO Auto-generated method stub
System.out.println("提供茶水,提供Wifi");
ticketOffice.SaleTicket();
}
}
package com.springAop;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
TicketOffice office=new TicketOffice();
//创建代理对象
Ticket proxy=new ProxyTicket(office);
proxy.SaleTicket();
}
}
这样我们就实现了静态代理功能,但是我们会发现一个问题,如果代理点要实现更多的功能,比如提供电话预约,提供咖啡等我们就需要在创建一个代理对象,这样会导致代码臃肿,可能每次增加一个功能,就需要重新创建一个对象,修改起来也必将麻烦。接下来,我们就要用到动态代理,动态代理会帮我们解决这些问题