代理模式
来源:互联网 发布:男包品牌 知乎 编辑:程序博客网 时间:2024/06/05 15:10
代理模式(结构型模式)
所谓代理,是指具有与代理元(被代理对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中进行某些特别的处理
这里以买书为例,我们一般直接去书店或去网上商店上买书,而不直接去出版社买。这里书店就是出版社的代理,出版社就是一个被代理的对象。
subject.java
代理类与被代理类的共同接口
public interface Subject { void sailBook();}
Press.java
出版社,被代理对象
public class Press implements Subject { @Override public void sailBook() { System.out.println("卖书"); }}
BookStore.java
书店,代理对象
public class BookStore implements Subject { private Press press; @Override public void sailBook() { if (press == null) { press = new Press(); } discount(); press.sailBook(); integral(); } public void discount() { System.out.println("打折"); } public void integral() { System.out.println("积分"); }}
Test.java
测试类
public class Test { public static void main(String[] args) { BookStore proxy = new BookStore(); proxy.sailBook(); }}
结果
打折卖书积分
代理模式(动态代理)
不需要自己写代理类,由jdk帮你生成。Struts2的拦截器和spring AOP都是用到了动态代理
Subject.java
代理类和被代理类的接口
public interface Subject { void sailBook();}
Press.java
被代理类
public class Press implements Subject { @Override public void sailBook() { System.out.println("卖书"); }}
MyHandler.java
实现了InvocationHandler接口,实现了其invoke()方法
public class MyHandler implements InvocationHandler { private Press press; public void setPress(Press press) { this.press = press; } @Override public Object invoke(Object proxy, Method method, Object[] args) { Object result = null; discount(); try { result = method.invoke(press, args); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } integral(); return result; } public void discount() { System.out.println("打折"); } public void integral() { System.out.println("积分"); }}
Test.java测试类
public class Test { public static void main(String[] args) { Press press = new Press(); MyHandler handler = new MyHandler(); handler.setPress(press); Subject subject = (Subject) Proxy.newProxyInstance(Press.class.getClassLoader(), Press.class.getInterfaces(), handler); subject.sailBook(); }}
结果
打折卖书积分
阅读全文
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- 牛顿法与拟牛顿法学习笔记(一)牛顿法
- gRpc的demo测试过程
- BZOJ 4094: [Usaco2013 Dec]Optimal Milking 线段树
- 怎样花两年时间去面试一个人
- onTouch事件的传递机制
- 代理模式
- Qt中插入图片
- windows搭建基于nginx的本地web前后端开发环境
- 【Android 数据业务解析】PreferredApn修改的源码分析
- caffe学习资料整理
- Latex写作的入门使用
- HTML 2017.7.16
- nodejs密码加密中生成随机数
- Dating with girls(2) HDU