代理模式的思想:代理类与目标类实现同一个接口,同时代理类中维护一个目标对象的引用。(如图)
代理模式的作用:让每个类各司其职,单一职责原则
简单的例子:
代码结构:
Service接口
package com.design.proxy;
/**
* 代理模式要求目标类与委托类实现同一个接口
*/
public interface Service {
public void m1();
public void m2();
public void m3();
}
Target类
package com.design.proxy;
/**
* 目标类
* 处理业务代码
*/
public class Target implements Service{
@Override
public void m1() {
System.out.println("target m1");
}
@Override
public void m2() {
System.out.println("target m2");
}
@Override
public void m3() {
System.out.println("target m3");
}
}
Proxy类
package com.design.proxy;
/**
* 委托类 代理类
* 处理其他的功能代码(以计时为例)
*/
public class Proxy implements Service{
Service target;
public Proxy(Service target){
this.target=target;
}
@Override
public void m1() {
long t1=System.nanoTime();
target.m1();
long t2=System.nanoTime();
System.out.println(t2-t1);
}
@Override
public void m2() {
long t1=System.nanoTime();
target.m2();
long t2=System.nanoTime();
System.out.println(t2-t1);
}
@Override
public void m3() {
long t1=System.nanoTime();
target.m3();
long t2=System.nanoTime();
System.out.println(t2-t1);
}
}
Test类
package com.design.proxy;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Service target=new Target();
Service proxy=new Proxy(target);
proxy.m1();
proxy.m2();
proxy.m3();
}
}
一个简单的代理模式就非常清楚啦~