当使用静态代理模式时,我们会有一个真实的对象(RealSubject),一个代理对象(ProxySubject),代理对象将请求转发给真实对象,并可以在请求前后执行额外的操作。
真实对象和代理对象要实现同一个接口
代理对象要代理真实角色
比如 找中介买房
真实对象:买家
代理对象:中介
package org.example;
public class StaticProxy {
public static void main(String[] args) {
He he=new He(new You());
he.HappyBuy();
}
}
interface Buy{
void HappyBuy();
}
class You implements Buy{
@Override
public void HappyBuy() {
System.out.println("xxx要买房了");
}
}
//代理对象,帮助你买房
class He implements Buy{
private Buy target;
public He(Buy target){
this.target=target;
}
@Override
public void HappyBuy() {
before();
this.target.HappyBuy();
after();
}
public void before(){
System.out.println("带客户看房,签订买卖合同,支付房款");
}
public void after(){
System.out.println("搬进新房");
}
}
总结:
首先创建了一个接口(buy ),并且定义了一个方法(HappyBuy )
真实对象(You )调用 HappyBuy方法
class You implements Buy{
@Override
public void HappyBuy() {
System.out.println("xxx要买房了");
}
}
代理对象(He )调用 HappyBuy方法
class He implements Buy{
private Buy target;
public He(Buy target){
this.target=target;
}
@Override
public void HappyBuy() {
before();
this.target.HappyBuy();
after();
}
public void before(){
System.out.println("带客户看房,签订买卖合同,支付房款");
}
public void after(){
System.out.println("搬进新房");
}
}
创建主函数实现
将真实对象丢进代理对象,让代理对象去执行
He he=new He(new You());
public class StaticProxy {
public static void main(String[] args) {
He he=new He(new You());
he.HappyBuy();
}
}