您的位置:首页 > 编程语言 > Java开发

Java代理模式

2016-06-25 00:00 155 查看
摘要: 代理模式定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。

代理模式类图:



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代理模式