代理模式
原始定义:Proxy pattern provides a surrogate or placeholder for another object in order to controll access to it
宁看懂了吗?
翻译:代理模式就是给某一个对象(被代理对象proxyee)提供一个“替身”或者“占位符”来达到控制这个对象的目的。
我注:也就是说,相比于之前我们直接操作这个对象(proxyee),我们通过操作代理对象(proxyer)来间接的操作proxyee。 这下懂了吧亲?
静态代理
从字面理解,就是有另一个人代替了你去做了本来你应该做的事情(在代码中其实还是你自己做的,这里先不管具体谁做的)。
静态代理模式的优点:
- 在不改变原有代码的前提下增加功能
-
帮助你理解AOP
静态代理模式的缺点:
- 代理类必须实现被代理类实现的接口,一旦被代理类的功能增加,会牵扯到代理类的代码。
这里用一个例子来解释静态代理的流程和代码。
我们假设你是蔡徐坤的经纪人,蔡徐坤自己跳舞是赚不到钱的,只有你接到业务让他跳舞他才有收入。
首先我们先创建一个功能接口叫做(如果对这里为什么要使用interface而不是class有疑问,这里是java编程的惯例,一般来讲,功能使用接口,实体使用类)
public interface talent{
void dance();
void sing();
}
然后我们创建出蔡徐坤,并且实现了他的天赋(talent 接口)
public class CaiXuKun implements talent{
@override
public void dance(){
system.out.println("我是来自美国校队的拉拉队队长,跳麻溜的");
}
@override
public void sing(){
system.out.println("鸡你太美");
}
}
然后我们让蔡徐坤自己表演下才艺(单独运行下他的方法)
public class TestCaixukun {
public static void main(String[] args) {
CaiXuKun caiXuKun = new CaiXuKun();
caiXuKun.sing();
caiXuKun.dance();
}

然后发现他没有收到钱!!!!!
现在的重点来了,我们要使用经纪人来代理业务了,创建一个代理对象就叫做ProxyManager吧
public class ProxyManager implements talent{
CaiXuKun target; //这里我们需要一个CaiXuKun的实例来保证还是caixukun本人在跳舞!!!!
public void setTarget(CaiXuKun target) {
this.target = target;
}
@Override
public void dance() {
System.out.println("跳舞收费五十块 ,请交钱!");//这里就是我们添加的功能了!!!并且我们没有动CaiXuKun的代码!
target.dance();
}
@Override
public void sing() {
System.out.println("蔡徐坤唱歌收费五十块,请交钱!!!");//这里就是我们添加的功能了!!!并且我们没有动CaiXuKun的代码!
target.sing();
}
}
在这里使用代理类运行一下
public class TestCaixukun {
public static void main(String[] args) {
ProxyManager proxyManager = new ProxyManager();
CaiXuKun caiXuKun = new CaiXuKun();
proxyManager.setTarget(caiXuKun);
proxyManager.dance();
proxyManager.sing();
}
}
我们就成功了增加了功能了!!!! 你看懂了吗!!!
现在你回头看上面 代理模式的优点,映象应该会深刻和具体一点