静态代理
jing静态代理,是接口的一种应用方式。
首先由一个接口,然后对应接口有一个实现。
代理就是不需要本类去操作,而是让人家去操作。
比如,你需要买一张票,让黄牛代替你去买。
代理类和被代理类共同实现一同一个接口,这样代理类就具有被代理类的相同的功能方法。然后代理类需要获取到被代理类的实例,用来执行被代理类的操作,所以代码实现中,代理类中应该能获取到接口或者具体被代理类的对象,这样才能做被代理类的功能。这个对象可以在构造器中传入,然后再代理类中实现的接口的方法中,在通过被代理类对象运行相应功能。在运行前后增加相应的逻辑,就可以对被代理类的功能进行增强。
代码如下:
代理类即可代替被代理类执行功能,又能把功能增强。
interface PutongUser{
int buyTicket();
}
class VipUser implements PutongUser{
@Override
public int buyTicket() {
System.out.println("vip可以买5张票");
return 5;
}
}
class ProxyUser implements PutongUser{
private PutongUser putongUser;
ProxyUser(PutongUser putongUser){
this.putongUser = putongUser;
}
@Override
public int buyTicket() { buyTenTicket();
putongUser.buyTicket();
return 0;
}
public int buyTenTicket(){
System.out.println("黄牛自带可以买十个票功能");
return 10;
}
public static void main(String[] args) {
PutongUser putongUser = new VipUser();
ProxyUser proxyUser = new ProxyUser(putongUser);
proxyUser.buyTicket();
}
java中的典型例子
线程的创建
Runable接口即是需要继承的接口thread是其代理类。
自己的写的继承Runable接口的类即是被代理的类。
创建线程,用Thread执行即可。
public class ThreadStaticProxy {
public static void main(String[] args) {
Runnable myThead = new MyThead();// 目标角色
Thread proxy = new Thread(myThead ).start();// 代理角色
}
}
//代理类
class MyThread implements Runnable {
public void run() {
System.out.println("执行。。。。。。。。");
}
}