内容简介:生活中的代理:黄牛 【三个角色。我(真实对象)黄牛(代理对象)火车票(目的对象)】解决的问题是:在直接访问对象时带来的问题 ,原先直接访问的两个类通过代理对象不在直接访问,可以实现解耦。图片描述
代理简单介绍
生活中的代理:黄牛 【三个角色。我(真实对象)黄牛(代理对象)火车票(目的对象)】
代理模式出现的原因
- 真实对象无法直接访问目的对象
- 真实对象不想直接访问目的对象
- 真实对象访问目的对象存在困难
解决的问题是:在直接访问对象时带来的问题 ,原先直接访问的两个类通过代理对象不在直接访问,可以实现解耦。
代理模式对应的UML图
图片描述
代理模式的分类
按照代理对象的创建时机划分为两种:
1、在编译前已经创建好对象,编译之后运行前代理类的.Class文件就已经存在,这种的称为静态代理
2、程序在运行的时候动态的创建代理对象,这种的称为动态代理
静态代理
在代码中手动的创建代理类。模拟的代码如 IDEA展示
/**
* 定义一个接口
* 真实对象要干什么,代理对象通过接口可以知道
*/
public interface IUserDo {
void takeTrain(Ticket ticket);
}
/**
* @author pangjianfei
* @Date 2019/5/22
* @desc 真实对象
*/
public class RealUser implements IUserDo {
public final String NAME = "真实回家人";
@Override
public void takeTrain(Ticket ticket) {
System.out.println(NAME + " : 抢到票了,我要回家了,花了"+ ticket.proxyPrice.intValue() + "元,值了!");
}
}
/**
* @author pangjianfei
* @Date 2019/5/22
* @desc 代理角色,黄牛
*/
public class ProxyUser implements IUserDo{
public final String NAME = "黄牛";
/**代理的是哪一位*/
RealUser realUser;
public ProxyUser(RealUser realUser) {
this.realUser = realUser;
}
@Override
public void takeTrain(Ticket ticket) {
Ticket realTicket = buyTicket(ticket);
realUser.takeTrain(realTicket);
System.out.println(NAME + " : 我挣了" +(realTicket.proxyPrice.intValue()-realTicket.realPrice.intValue()) + "元");
}
public Ticket buyTicket(Ticket ticket) {
System.out.println(NAME + " : 去买从"+ticket.from+"到"+ticket.to+"的火车票了");
Ticket backHomeTicket = new Ticket();
backHomeTicket.setFrom(ticket.from);
backHomeTicket.setTo(ticket.to);
backHomeTicket.setTakeOffDate(ticket.takeOffDate);
backHomeTicket.setRealPrice(new BigDecimal(100));
backHomeTicket.setProxyPrice(new BigDecimal(120));
System.out.println(NAME + " : 购买成功");
return backHomeTicket;
}
}
以上所述就是小编给大家介绍的《代理模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Design Patterns
Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99
You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!