目录
代理模式是什么?
日常中听到“代理”最多的地方,应该是XX销售代理。
比如面膜销售代理
假如销售面膜这个功能,本来是你拥有的,我当你的销售代理时,我就也可以进行销售面膜功能了。
那,我当你的代理,有什么好处呢?
1. 你的销路宽了。
我有我的人脉圈,能把面膜卖给我的亲朋好友。
2. 你承受风险小了。
面膜出现质量问题时,亲朋好友是来我这要说法,他们不认识你,只知道我卖给他们的。
所以说,“代理”其实就是一种,通过另一个人实行你的销售功能,同时能够增强你的销路、降低你风险的一种商业行为。
也就是说,在编程中,模仿这种商业模式,让另一个类去实行本类的功能,同时扩展功能、增加安全性的一种模式。
静态代理模式是什么
知道代理是啥了,再来简单聊一下静态。
静态,静态,静止状态。就是说,只能代理固定的类,就叫做静态代理。
静态代理是代理模式中的一种。代理模式还有:动态代理和Cglib代理,这些我会再其他文章讲解。
静态代理模式小案例
接下来,咱们用代码把上边代理销售面膜来实现一波。
代码:
卖面膜接口
package 代理模式.静态代理;
public interface IMaskSeller {
// 买面膜方法
void sellMask();
}
你——被代理者
package 代理模式.静态代理;
// 你是被代理对象
public class You implements IMaskSeller {
@Override
public void sellMask() {
System.out.println("卖面膜");
}
}
我——代理类
package 代理模式.静态代理;
// 我代理你
public class Me implements IMaskSeller {
private You you;
public Me(You you) {
this.you=you;
}
@Override
public void sellMask() {
/*
* 相同的方法,增强后,在执行买面膜方法
* 此处可以实现多种增强
* 1. 增加日志
* 2. 安全验证
* 3. 数据验证
* 4. 或者直接飞起以前的方法,此处重写
* 等
* 等
*/
System.out.println("我是代理,能把面膜卖给自己的盆友");
you.sellMask();
}
}
我的朋友——客户端
package 代理模式.静态代理;
// 相当于客户端
public class MyFriend {
public static void main(String[] args) {
// 此处是个疑问点
You you = new You();
Me me = new Me(you);
me.sellMask();
}
}
UML类图:
看不懂UML图的童鞋,可以进我的博客主页,学习UML类图。
如上所示:
1. 被代理者,代理者,同时实现统一接口。
2. 代理者调用被代理者的方法。
3. 客户端,实例化被代理类,传递给代理类,调用代理类的方法实现业务。
疑问(希望看到的大佬解答):
静态代理模式,代理的是一个类,为什么不在代理类里边直接实例化被代理类,反而要到客户端去实例化?
学习还是要继续,继续带着疑问学下去,如果以后理解了,会在这里写出答案。
当然,我更希望路过的大佬给些指点。
优缺点:
优点:
我已经在代码的注释里边写的很清楚了:
可以实现多种增强
* 1. 增加日志
* 2. 安全验证
* 3. 数据验证
* 4. 或者直接飞起以前的方法,此处重写
* 等
* 等
缺点:
当代理类很多时,接口增加一个方法所有的代理类全部都得实现一遍。!
以上为个人所学和总结,如果那里不对,希望看到的大佬指正批评!