静态代理模式
要求
- 真实对象和代理对象都必须实现同一个接口
- 代理对象要代理真实角色
好处
- 代理对象可以做很多真实对象做不了的事情
- 真实对象专注做自己的事情
下面,以我(真实对象)要结婚,找到婚庆公司(代理)帮忙为例。
代码示例
package com.thread;
public class TestStaticProxy {
public static void main(String[] args) {
//Runnable接口实现类 与此函数中Me的作用相同
new Thread( () -> System.out.println("我爱你")).start();
new Company(new Me()).HappyMarry();
/**
* 将此两行代码类比
* company与Thread均为代理 分别代理真实对象
* 上面调用真实对新象(实现类)的start方法
* 下面调用真实对象(Me)的HappyMarry方法
*/
}
}
//定义接口Marry
interface Marry{
void HappyMarry();
}
//真实角色 我要结婚
class Me implements Marry{
@Override
public void HappyMarry() {
System.out.println("劳资杰份惹!");
}
}
//代理角色 婚庆公司帮助我结婚
class Company implements Marry{
//代理谁 --> 真实目标角色
private Marry target;//代理的对象
public Company(Marry target){
this.target = target;
}
@Override
public void HappyMarry() {
before();
this.target.HappyMarry();//这就是真实对象
after();
}
private void before() {
System.out.println("办理婚宴");
}
private void after() {
System.out.println("收钱");
}
}
输出结果
我爱你
办理婚宴
劳资杰份惹!
收钱
Process finished with exit code 0