需求:通过新郎结婚和婚庆公司来演示静态代理是怎么实现的。
静态代理:
为某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。
父接口:
package com.lwx;
/**
* By:刘文旭 ~ https://blog.csdn.net/qq_40414738
* Date:2018/10/30 21:32 .
*/
public interface Marry {
public void toMarry();
}
代理类:
package com.lwx;
/**
* By:刘文旭 ~ https://blog.csdn.net/qq_40414738
* Date:2018/10/30 21:37 .
*
* 代理类 代理角色
* 1.与目标角色实现共同接口
* 2.持有目标类的引用
* 3.增强目标角色行为
*/
public class Company implements Marry {
private You you;
public Company(You you) {
this.you = you;
}
public void before() {
System.out.println("正在紧张布置婚礼现场。。。");
System.out.println("放炮。。。开始~");
}
@Override
public void toMarry() {
before();
// 执行真正的目标方法
you.toMarry();
after();
}
public void after() {
System.out.println("婚礼结束。。。开启人生第二阶段");
}
}
委托类:
package com.lwx;
/**
* By:刘文旭 ~ https://blog.csdn.net/qq_40414738
* Date:2018/10/30 21:33 .
*/
public class You implements Marry{
@Override
public void toMarry() {
System.out.println("等了好久终于等到今天。。。哈哈哈");
}
}
单元测试:
package com.lwx;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* By:刘文旭 ~ https://blog.csdn.net/qq_40414738
* Date:2018/10/30 21:43 .
*/
public class CompanyTest {
@Test
public void toMarry() {
// 构造代理角色同时传入真实角色
Company company = new Company(new You());
company.toMarry();
}
}
运行结果: