定义: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(); } }