最全介绍的代理模式---第一节
一、什么是代理?
其实生活中有很多例子
二、为什么要代理呢?(1)一件产品,生产出来后,需要代理商来销售它,我们作为客户,会通过代理商来买产品,代理商就是我们的代理对象,产品为被代理对象(目标对象)
(2)租房子(中介就是代理对象)等等
(1)代理更专业,也更方便
如你出国留学,你不会很便利地直接去国外与学校直接交谈,作为学校地招生代理,有着非常专业地流程,对学校也很了解,你就可以通过招生代理直接了解学校,不用很麻烦地出国。
(2)有时候目标对象对于你来说没有访问权限,这时就需要中间代理对象来做中间人代替你访问。
三、代理模式1、概念当一个对象不能直接使用,可以在客户端和目标对象直接创建一个中介,这个中介就是代理,也就是喂目标对象提供一个替身。
2、作用
(1)访问控制在代理中,控制是否可以调用目标对象地方法
(2)功能增强可以在目标对象实现地基础上,增强额外地功能操作
如代理商可以增加商品价格,为自己博得利润,或者向客户发放优惠券。
3、被代理的对象
远程对象,或者创建开销大的对象,或者需要安全控制的对象,等等。
4、分类
(1)静态代理模式代理类是手工实现的Java文件,代理的目标对象是规定的。
(2)动态代理模式在程序执行过程中,使用JDK的反射机制,避免静态代理的缺点。
四、静态代理JDK代理模式下节会介绍
Cglib代理模式下节会介绍
1、介绍
代理类是手工实现的Java文件,代理的目标对象是规定的。使用时,被代理对象(目标对象)与代理对象都必须实现相同的接口或者继承相同的父类。
2、特点
(1)代理类是自己手工实现的,自己创建一个Java类,表示代理类
(2)你代理的目标对象是确定的
(3)被代理对象(目标对象)与代理对象都必须实现相同的接口或者继承相同的父类
3、优缺点
优点
1)实现简单,容易理解;
2)在不修改目标对象的功能的前提下,能够通过代理对象对目标对象实现功能扩展/增强
缺点当你的项目中,目标类和代理类很多的时候,有以下的缺点
1)当目标类增加了,代理类可能也需要成倍的增加,大力类数量过多
2)当你的接口中功能增加了,或者修改了,会影响众多的实现类,厂家类、代理类都需要修改。
4、模拟一个用户购买U盘的行为
产品U盘UsbSell,目标对象UsbKingFactory,代理对象Taobao,客户终端ShopMain
- 实现步骤
(1)创建一个接口,定义卖U盘的方法,表示你的厂家和商家做的事情
(2)创建厂家类,实现(1)步骤的接口
(3)创建商家,就是代理,也需要实现(1)中的接口
(4)创建客户端类,调用商家的方法买一个U盘。
- 其中,代理类完成的功能
(1)目标类中方法的实现
(2)功能增强
- 代码
(1)UsbSell接口
// 表示功能的厂家,或者商家要完成的功能
public interface UsbSell {
// 定义方法
// amount: 表示一次购买的数量,暂时不用
// 返回表示一个U盘的价格
float sell(int amount);
// 可以定义多个其他的方法
}
(2)目标对象UsbKingFactory类
// 目标类金士顿厂家,不接用户的单独购买
public class UsbKingFactory implements UsbSell {
@Override
public float sell(int amount) {
// 一个128G的U盘85元
// 后期可以根据amount,可以实现不同的价格,比如1000个,单价85元,
return 85.0f;
}
}
(3)代理对象Taobao类
// 淘宝是个商家,代理金士顿U盘的销售
public class Taobao implements UsbSell {
//声明 商家代理的厂家具体是谁
private UsbKingFactory factory = ne UsbKingFactory();
@Override
// 实际销售U盘的功能
public float sell(int amount) {
// 向厂家发送订单,告诉厂家,我买了U盘,厂家发货
float price = factory.sell(amount);//厂家的价格
// 商家 需要加价,也就是dialing要增加价格
// 这里相对于目标对象,就增强了功能
// 代理类 在完成目标类方法调用后,增强了功能
price += 25;
// 在目标类的方法调用后。你做的其他功能,都是增强功能,如发放优惠券
System.out.println("淘宝商家,给你返回一个优惠券,或者红包");
return price;
}
}
(4)客户终端ShopMain
public class ShopMain {
public static void main(String[] args) {
// 创建代理商家的 Taobao 对象
Taobao taobao = ne Taobao();
float price = taobao.sell(1);
System.out.println("通过淘宝的商家,购买U盘单价"+price);
}
}
空调维修
- 我的世界电脑版运行身份怎么弄出来(我的世界
- 空调抽湿是什么意思,设置抽湿的温度有什么意
- 方太燃气灶有一个打不着火 怎么修复与排查方法
- 夏季免费清洗汽车空调的宣传口号
- 清洗完空调后出现漏水现象
- iphone6能玩什么游戏(iphone6游戏)
- 如何设置电脑密码锁屏(如何设置电脑密码锁屏
- win10删除开机密码提示不符合密码策略要求
- 电脑w7显示不是正版(w7不是正版怎么解决)
- 万家乐z8热水器显示e7解决 怎么修复与排查方法
- 1匹空调多少瓦数(1匹空调多少瓦)
- 安卓手机连接电脑用什么软件好(关于安卓手机
- 电脑网页看视频卡是什么原因(爱拍看视频卡)
- 华帝燃气灶点火器一直响然后熄火怎么办:问题
- 电脑壁纸怎么换(关于电脑壁纸怎么换的介绍)
- 冬天空调的出风口应该朝什么方向(冬天空调风