定义:provide a surrogate or palceholder for anthoer object to control access to it
提供一个代理或者另一个对象的占位符来控制对原本对象的访问
类图:
分类:代理模式分为 普通代理、强制代理(访问该对象必须通过他的代理类)、动态代理
一:接口
package dmode.proxy;
/**
* 类描述: 接口
* @version 1.0 CreateDate: 2015-2-13
*
* @updateDate
* @updatePerson
* @declare
*/
public interface Subject {
/**
* 方法描述:打卡
*/
public void punchCard(String name,String company);
/**
* 方法描述:上班
*/
public void beOnDuty();
/**
* 方法描述:下班
*/
public void offDuty();
}
二: 实现类
package dmode.proxy;
/**
* 类描述: 员工
* @version 1.0 CreateDate: 2015-2-13
*
* @updateDate
* @updatePerson
* @declare
*/
public class Employer implements Subject{
/**
*@see dmode.proxy.Subject#punchCard()
*/
@Override
public void punchCard(String name,String company) {
System.out.println(name + "上班打卡.......公司:" + company);
}
/**
*@see dmode.proxy.Subject#beOnDuty()
*/
@Override
public void beOnDuty() {
System.out.println("开始工作.......");
}
/**
*@see dmode.proxy.Subject#offDuty()
*/
@Override
public void offDuty() {
System.out.println("下班打卡.......");
}
}
三 代理类
package dmode.proxy;
/**
* 类描述: 代理类
* @version 1.0 CreateDate: 2015-2-13
*
* @updateDate
* @updatePerson
* @declare
*/
public class StaProxy implements Subject{
private Subject subImpler;
public void setProxyEmployer(Subject sub){
this.subImpler = sub;
}
/**
* 方法描述:预处理方法 aop 就是在方法前后做了这样的拦截预处理
*
*/
public void before(){
System.out.println("预处理方法前.....");
}
public void after(){
System.out.println("预处理方法后.....");
}
/**
* 模拟环绕切割
*@see dmode.proxy.Subject#punchCard()
*/
@Override
public void punchCard(String name,String company) {
before();
subImpler.punchCard(name,company);
after();
}
/**
*@see dmode.proxy.Subject#beOnDuty()
*/
@Override
public void beOnDuty() {
subImpler.beOnDuty();
}
/**
*@see dmode.proxy.Subject#offDuty()
*/
@Override
public void offDuty() {
subImpler.offDuty();
}
}