添加小知姐姐微信: csheima7 回复动态代理 获取完整版视频及笔记源码
# 动态代理深入挖掘
## 为什么要讲动态代理
1. 框架底层几乎离不开**反射**加**动态代理**,可见其重要性;
2. 我们大多数同学只是会用,不明白其核心原理,这就可能会导致你在使用的过程中出现问题而不明其所以然;
3. 出去面试我们要不要说点有深度的东西呢?当然要!不然企业凭什么选择你不选择别人;
4. 开启大家对于Java学习的新大门,领悟Java本身的乐趣,这才是长久在这个行业的生存之道。有一句话说的好:知之者不如好之者,好之者不如乐之者;
## 代理模式的优势
- **扫盲:什么是代理模式?**
生活中的例子:房屋中介
> 房主:我只想把我房子卖掉(**买卖双方交易**),200万,你把钱给我,我把房子过户到你名下;
>
> 中介:推广、带客户看房、准备合同、买卖双方签署合同、**买卖双方交易**、售后;
>
> 这里中介就是房主的代理,房主只是想把自己的房子卖掉,不需要关心其它的事情;
>
> 中介可以代理很多房主的房子,他们提供房屋销售的全套流程:售前、交易、售后;
>
> 需要注意的是,其中的**交易**是需要被代理者来完成的;
>
> 这个例子中,代理对象就是中介对象,被代理对象就是房主对象,代理对象自己无法完成**交易**流程,所以代理对象中需要有一个被代理对象作为其成员实例,以用来完成被代理的核心业务逻辑(**交易**);
具体用代码描述
```java
/**
* Created By gao_e on 2020/3/16 10:22
* 卖房子的人
* 可以是房主,也可以是中介
*/
public interface HouseSeller {
// 卖房
void sellHouse();
}
```
```java
/**
* Created By gao_e on 2020/3/16 10:21
* 房主
*/
public class MasterOfHouse implements HouseSeller {
private Integer howMuchW;
public MasterOfHouse(Integer howMuchW) {
this.howMuchW = howMuchW;
}
@Override
public void sellHouse() {
System.out.println("一口价"+this.howMuchW+"万");
System.out.println("收钱");
System.out.println("过户");
}
}
```
```java
/**
* Created By gao_e on 2020/3/16 10:27
* 房屋中介
*/
public class HouseAgent implements HouseSeller {
private HouseSeller houseSeller;
public HouseAgent(HouseSeller houseSeller) {
this.houseSeller = houseSeller;
}
@Override
public void sellHouse() {
this.doSomethingOnBefore();
this.houseSeller.sellHouse();
this.doSomethingOnAfter();
}
private void doSomethingOnBefore() {
System.out.println("售前...");
}
private void doSomethingOnAfter() {
System.out.println("售后...");
}
}
```
```java
/**
* Created By gao_e on 2020/3/16 10:34
* 卖房、买房流程
*/
public class SellHouse {
public static void main(String[] args) {
System.out.println("一个房主将卖房事情委托给中介,中介针对这个房子会单独创建出一个中介(代理)对象");
HouseSeller houseSeller = new HouseAgent(new MasterOfHouse(2000));
System.out.println("中介将房子挂出来卖,买家来买房");
houseSeller.sellHouse();
}
}
```
结果如下
![image-20200316112735635](..\素材\image-20200316112735635.png)
......
|
|