静态代理模式
类图:

核心角色:
抽象角色:定义代理结算和真实角色的公共对外方法;
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。真正的业务逻辑
代理角色:实现抽象角色,是真实角色的代理,通过角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
应用场景:
安全代理:屏蔽对真实角色的直接访问。
远程代理:通过代理类处理远程方法调用(RMI)
延迟代理:先加载轻量级的代理对象,真正需要再加载真实对象
code:
抽象角色:
/** * ClassName: House<br/> * Description: 房子<br/> * date: 2018/12/26 11:08 AM<br/> * * @author chengluchao * @since JDK 1.8 */ public interface House { /** * 地址 */ void address(); /** * 房租 */ void rent(); /*** * 租期 */ void leaseTerm(); /** * 房东 */ void landlord(); }
真实角色:
/** * ClassName: RealHouse<br/> * Description: 房东<br/> * date: 2018/12/26 11:14 AM<br/> * * @author chengluchao * @since JDK 1.8 */ public class RealHouse implements House{ @Override public void address() { System.out.println("北京市-东城区-长安街-1号院-1号楼-1单元-101"); } @Override public void rent() { System.out.println("3000/月"); } @Override public void leaseTerm() { System.out.println("2年"); } @Override public void landlord() { System.out.println("王大户"); } }
代理角色:
/** * ClassName: ProxyHouse<br/> * Description: <br/> * date: 2018/12/26 11:19 AM<br/> * * @author chengluchao * @since JDK 1.8 */ public class ProxyHouse implements House{ private House house; public ProxyHouse(House house) { this.house = house; } @Override public void address() { house.address(); } @Override public void rent() { System.out.println("9000/月"); } @Override public void leaseTerm() { System.out.println("1年11个月"); } @Override public void landlord() { System.out.println("X中介"); } }
测试类:
/** * ClassName: HouseTest<br/> * Description:测试类 <br/> * date: 2018/12/26 11:21 AM<br/> * * @author chengluchao * @since JDK 1.8 */ public class HouseTest { public static void main(String[] args) { House real = new RealHouse(); House porxy = new ProxyHouse(real); porxy.address(); porxy.landlord(); porxy.leaseTerm(); porxy.rent(); } }
运行结果:
北京市-东城区-长安街-1号院-1号楼-1单元-101
X中介
1年11个月
9000/月
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步