设计模式——代理模式
2019-01-26 本文已影响237人
大黑跟小白的日常
静态代理
简单实现
1、服务接口
![](https://img.haomeiwen.com/i15253776/91177820bbea3a7d.png)
2、服务实现类
![](https://img.haomeiwen.com/i15253776/83f6d2eb0e3f00f4.png)
3、服务的抽象代理类
![](https://img.haomeiwen.com/i15253776/be3232ad91916ea4.png)
4、服务的具体代理类
![](https://img.haomeiwen.com/i15253776/3ca46bbc9ed13c8c.png)
5、实现代理过程
![](https://img.haomeiwen.com/i15253776/67559598b44190fb.png)
为什么要用代理模式?
比如我们将吃饭封装成一个方法,方法内容:吃饭。
![](https://img.haomeiwen.com/i15253776/8481402452b67479.png)
当我们想把吃饭改成:洗手——吃饭——刷牙
那我们怎么改呢?改原方法?这样
吃饭(){
洗手();
吃饭;
刷牙();
}
![](https://img.haomeiwen.com/i15253776/698d3ec3cbc9ff00.png)
![](https://img.haomeiwen.com/i15253776/866fd7b205c81cc6.png)
是这样改么?那么当我们发现这种方式太过于麻烦,又想改回来的时候,就将代码重新注掉呗。那么当我们想保持两种吃饭的方法又该怎么办呢?写两个吃饭的方法么?
有这样一种方式,既可以做到代码复用,又可以不用改动代码逻辑。
![](https://img.haomeiwen.com/i15253776/36660e58609dd2a3.png)
![](https://img.haomeiwen.com/i15253776/6c1b133fa75b58d4.png)
![](https://img.haomeiwen.com/i15253776/b56311764639c715.png)
代码逻辑不用复制。也没有修改原吃饭的方法代码。
这样就把选择权交给了用户,自己到底是想成为一个健康的人,还是一个只会吃的人。
![](https://img.haomeiwen.com/i15253776/43ed44e59c002b3e.png)