首页 > 代码库 > 12 代理模式
12 代理模式
核心作用:通过代理,控制对对象的访问。
代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
可以详细控制某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(AOP的微观实现)
AOP (Aspect Oriented Programming)面向切面编程的核心实现机制!
代理对象UML图
从图中,我们可以看到:
1、抽象角色
定义代理角色和真实角色对外的方法
2、真实角色
实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
3、代理角色
实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
分类:
静态代理:静态定义代理类
动态代理:程序运行时运用反射机制动态创建而成。
/** * 抽象角色 * * @author sun * */public interface Star { /** * 面谈 */ void confer(); /** * 签合同 */ void signContract(); /** * 订机票 */ void bookTicket(); /** * 唱歌 */ void sing(); /** * 收钱 */ void collectMoney();}
/** * 真实角色 * * @author sun * */public class RealStar implements Star { @Override public void confer() { System.out.println("RealStar confer"); } @Override public void signContract() { System.out.println("RealStar signContract"); } @Override public void bookTicket() { System.out.println("RealStar bookTicket"); } @Override public void sing() { System.out.println("RealStar(周杰伦) sing"); } @Override public void collectMoney() { System.out.println("RealStar collectMoney"); }}
/** * 代理类 * * @author sun * */public class ProxyStar implements Star { private Star star; public ProxyStar(Star star) { super(); this.star = star; } @Override public void confer() { System.out.println("ProxyStar confer"); } @Override public void signContract() { System.out.println("ProxyStar signContract"); } @Override public void bookTicket() { System.out.println("ProxyStar bookTicket"); } @Override public void sing() { System.out.println("ProxyStar sing"); } @Override public void collectMoney() { star.sing(); }}
/** * 客户端测试 * * @author sun * */public class Client { public static void main(String[] args) { Star real = new RealStar(); ProxyStar proxyStar = new ProxyStar(real); proxyStar.bookTicket(); proxyStar.confer(); proxyStar.collectMoney(); proxyStar.sing(); proxyStar.signContract(); }}
12 代理模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。