Java代理模式
2016-06-25 00:00
155 查看
摘要: 代理模式定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。
代理模式类图:
![](http://static.oschina.net/uploads/space/2016/0625/162050_Az6W_2494581.png)
RealSubject 是原对象(本文把原对象称为"委托对象"),Proxy 是代理对象。
Subject 是委托对象和代理对象都共同实现的接口。
operation() 是委托对象和代理对象共同拥有的方法。
举个生活中的例子,我们在12306客户端上买票操作,12306为代理角色,用户为真实角色
下面通过代码来实现
代理模式类图:
![](http://static.oschina.net/uploads/space/2016/0625/162050_Az6W_2494581.png)
RealSubject 是原对象(本文把原对象称为"委托对象"),Proxy 是代理对象。
Subject 是委托对象和代理对象都共同实现的接口。
operation() 是委托对象和代理对象共同拥有的方法。
举个生活中的例子,我们在12306客户端上买票操作,12306为代理角色,用户为真实角色
下面通过代码来实现
/** * Java代理模式 * * 订票 * @author Leizhi 2016/6/25 * @see * @since 1.0 */ public interface OrderTicket { /** * 支付 */ void pay(); /** * 订票 */ void bookTickets(); /** * 退票 */ void refundTickets(); /** * 退票 */ void endorseTickets(); }
/** * 用户 * * 真实角色 * @author Leizhi 2016/6/25 * @see * @since 1.0 */ public class User implements OrderTicket { @Override public void pay() { System.out.println("【用户】:我在支付----------"); } @Override public void bookTickets() { System.out.println("【用户】:我在订票----------"); } @Override public void refundTickets() { System.out.println("【用户】:我在退票----------"); } @Override public void endorseTickets() { System.out.println("【用户】:我在改签----------"); } }
package com.springapp.mvc.DesignPattern; /** * 12306客户端 * * 代理角色 * * @author Leizhi 2016/6/25 * @see * @since 1.0 */ public class Train12306 implements OrderTicket { private OrderTicket orderTicket; Train12306(OrderTicket orderTicket) { this.orderTicket = orderTicket; } @Override public void pay() { orderTicket.pay(); } @Override public void bookTickets() { orderTicket.bookTickets(); } @Override public void refundTickets() { orderTicket.refundTickets(); } @Override public void endorseTickets() { orderTicket.endorseTickets(); } }
/** * 模拟现实使用场景 * * @author Leizhi 2016/6/25 * @see * @since 1.0 */ public class UseCase { public static void main(String[] args) { OrderTicket orderTicket = new User(); Train12306 train12306 = new Train12306(orderTicket); train12306.bookTickets(); train12306.pay(); train12306.endorseTickets(); train12306.refundTickets(); } }
相关文章推荐
- Java的代理模式和回调函数
- JAVA代理模式
- Java的静态代理、动态代理,CGLib的动态代理,使用动态代理基于AOP的AspectJ框架—深入探究
- java动态代理
- java设计模式-代理模式
- java设计模式——代理模式(Proxy Pattern)
- Java设计模式——代理模式
- java代理模式-动态代理学习
- java代理模式-静态代理学习
- Java设计模式之代理模式
- Spring Mvc那点事---(30)Spring Mvc传统AOP自动代理实现
- Spring Mvc那点事---(29)Spring Mvc基于ProxyFactoryBean的传统AOP使用正则拦截
- Spring Mvc那点事---(28)Spring Mvc基于ProxyFactoryBean的传统AOP
- Spring Mvc那点事---(27)Spring Mvc基于aspect的AOP实现
- JAVA代理模式--动态代理
- JAVA代理模式--静态代理
- 五、代理模式proxy
- 设计模式-代理模式
- java代理模式(Proxy Pattern)
- java 代理模式详解之静态代理