什么是静态代理模式?
不言而喻,就是某个东西代理另外一个东西去做某些事情,在Java中,抽象成为对象来看,就是一个对象A代理对象B去实现一些事情,好让对象B专注于做自己的事情。
静态代理的实现
举个例子:你要结婚,你可以叫婚庆公司来帮你做一些事情,比如布置现场,主持婚礼等等,好让你专注于结婚这件事,不去操心其他的事情,这也就是婚庆公司代理了你去做了事情。
在Java中怎么实现,如下:
public class TestStaticProxy {
public static void main(String[] args) {
You you = new You();
WeddingCompany weddingCompany = new WeddingCompany(you);
weddingCompany.HappyMarry();
}
}
//结婚接口
interface Marry{
void HappyMarry();
}
//实体对象(被代理对象):你
class You implements Marry {
@Override
public void HappyMarry() {
System.out.println("我结婚啦,超开心!");
}
}
//代理对象:婚庆公司
class WeddingCompany implements Marry{
private Marry target;//婚庆公司要代理的目标对象
public WeddingCompany(Marry target){
this.target = target;
}
//婚庆公司代理你结婚这件事情
@Override
public void HappyMarry() {
before();
target.HappyMarry();
after();
}
//这就是代理对象做的事。
void before(){
System.out.println("结婚前,布置一下婚礼现场!");
}
void after(){
System.out.println("结婚后,开始收尾款啦!");
}
}
运行结果:
Thread也是这种方式实现的
Java代码如下:
public class TestStaticProxy {
public static void main(String[] args) {
You you = new You();
WeddingCompany weddingCompany = new WeddingCompany(you);
weddingCompany.HappyMarry();
Runnable runnable = new Runnable() {//这里的runnale就例如you
@Override
public void run() {//这里的run()的实现就例如上述You中的HappyMarry()方法对于Marry接口中的HappyMarry()方法的实现
System.out.println("我结婚啦,超开心!");
}
};
Thread thread =new Thread(runnable);//这里就例如:WeddingCompany weddingCompany = new WeddingCompany(you);
thread.start();//这里就例如:weddingCompany.HappyMarry();
}
}
总结
-
静态代理总结:
1,真实的对象(you)和代理对象(weddingcompany) 都要实现同一个接口(marry)
2,代理对象要代理真实的角色 -
好处:
1,代理对象可以做很多真实对象做不了的事情(before,after)
2,真实对象只专注做自己的事情(happymarry)