静态代理
1.1 现实生活中的代理
假如我们要去买电脑,我们通常需要去找电脑代理商购买,电脑代理商去电脑工厂提货,电脑代理商可以赚取中间的差价。 假如我们想买火车票,我们可以直接去12306网站买票。可是太难抢到票了,于是我们去找火车票的黄牛,让黄牛帮我们去12306买票,黄牛买到票再加价卖给我们,赚取中间的差价。文章源自JAVA秀-https://www.javaxiu.com/725.html
你买电脑 -> 电脑代理商 -> 电脑工厂
你买火车票 -> 黄牛 -> 12306
调用者 代理对象 真正干活的目标对象
我们发现代理对象
和真正干活的目标
都具有相同的功能(卖电脑/卖票
),代理可以在中间赚取差价(增强功能)。文章源自JAVA秀-https://www.javaxiu.com/725.html
1.2 代理模式的作用
代理对象可以在调用者
和目标对象
之间起到中介的作用。代理对象
可以对目标对象
的功能进行增强
。文章源自JAVA秀-https://www.javaxiu.com/725.html
1.3 代理模式涉及到四个要素
- 调用者: 你。
- 代理对象: 联想电脑代理商/黄牛。
- 目标对象: 电脑工厂/12306。
- 抽象对象: 代理对象和目标对象都共有的接口,保证代理对象和真实对象都有相应的方法,如电脑代理商和电脑工厂都需要有卖电脑的功能。
文章源自JAVA秀-https://www.javaxiu.com/725.html
1.4 什么是静态代理
由程序员创建代理类,再对其编译。在程序运行前,代理类的.class文件就已经存在了。文章源自JAVA秀-https://www.javaxiu.com/725.html
1.4 实现静态代理
- Providable接口
/*
提供商品的接口
*/
public interface Providable {
// 卖电脑
public abstract void sellComputer(double price);
// 维修电脑
public abstract void repairComputer(double price);
}
- ComputerFactory目标对象
/*
电脑工厂,真正生产电脑的厂商
*/
public class ComputerFactory implements Providable {
public void sellComputer(double price) {
System.out.println("电脑工厂卖出一台电脑,价格: " + price);
}
public void repairComputer(double price) {
System.out.println("电脑工厂修好一台电脑,价格: " + price);
}
}
- ComputerProxy代理对象
public class ComputerProxy implements Providable {
private ComputerFactory computerFactory; // 拥有目标对象的成员变量
public ComputerProxy(ComputerFactory computerFactory) {
this.computerFactory = computerFactory;
}
// 对方法进行增强
public void sellComputer(double price) {
double realPrice = price* 0.75;
System.out.println("代理商收到:" + price + "元,实际使用" + realPrice + "去电脑工厂买电脑");
computerFactory.sellComputer(realPrice);
System.out.println("代理商赚到:" + (price - realPrice) + "元钱");
}
// 不需要增强的方法直接调用
public void repairComputer(double price) {
computerFactory.repairComputer(price);
}
}
- 调用者Demo05
public class Demo05 {
public static void main(String[] args) {
// 1. 创建真实对象
ComputerFactory computerFactory = new ComputerFactory();
// 2. 创建代理对象
ComputerProxy proxy = new ComputerProxy(computerFactory);
// 3.调用代理对象的方法
proxy.sellComputer(8000);
proxy.repairComputer(1200);
}
}
- 运行效果
文章源自JAVA秀-https://www.javaxiu.com/725.html
1.5 静态代理优缺点
1.5.1 静态代理模式的优点
- 不需要修改目标对象就实现了目标对象功能的增加
1.5.2 静态代理模式的缺点
- 一个真实对象必须对应一个代理对象,如果大量使用会导致类的急剧膨胀。
- 如果抽象对象中方法很多,则代理对象也要编写大量的代码。
继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html

资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
评论