一、java静态代理模式
代理可以帮助真实对象做一些事情,以及真实对象不方便做的事情;而真实对象只需要专注于做自己的事情即可
要求
:
真实对象和代理对象都要实现同一个接口
1.1 示例:
婚庆公司帮助你结婚,做一些婚礼前的准备工作,你只需要结婚就好了。
StaticProxy.java
package com.peng.demo04;
// 静态代理
// 真实对象和代理对象都要实现同一个接口
// 代理可以实现一些真实对象做不到的事情,而真实对象只需要专注于做自己的事情即可。代理帮助真实对象做一些事情
// 例子:婚庆公司帮助你结婚,做一些婚礼前的准备工作,你只需要结婚就好了。
public class StaticProxy {
public static void main(String[] args) {
You you = new You();
WeddingCompany wc = new WeddingCompany(you);
wc.happyMarry();
}
}
// Marry接口
interface Marry{
void happyMarry();
}
// You实现Marry接口
class You implements Marry{
@Override
public void happyMarry(){
System.out.println("一拜天地");
}
}
// 婚庆公司实现Marry接口,构造方法传入真实对象
class WeddingCompany implements Marry{
private Marry target;
public WeddingCompany(Marry target) {
this.target = target;
}
@Override
public void happyMarry(){
before();
target.happyMarry();
after();
}
private void before() {
System.out.println("布置婚礼现场");
System.out.println("邀请嘉宾,举办婚礼");
}
private void after() {
System.out.println("收取费用");
}
}
1.2 类比于使用Runnable接口的多线程
new Thread(target).start() //开启线程
这里就是使用的静态代理模式。
Thread实现了Runnable接口,target对象的类也实现了Runnable接口。
通过Thread帮助target对象来开启多线程。