java23种设计模式 代理模式(五)

来源:互联网 发布:北京淘宝摄影工作室 编辑:程序博客网 时间:2024/05/02 00:51
深入java虚拟机
java与设计模式


代理模式:


第一种:静态代理模式:


1.我们先分析一下,继承和聚合的区别是什么,那种好?


public interface Moveable{
void move();
}


public class Car implements Moveable{

public void move(){
System.out.print("开始跑了");
}
}


继承的方式
public class DoMove extends Car{

public void reTime(){
super.move();
}
}




聚合的方式
public class DoMove{

Car car;

public DoMove(Car car){
this.car = car;
}

public void reTime(){
car.move();
}
}


聚合的灵活度更高,耦合度更低。
所以一般考虑聚合。


但是这里聚合还可以优化:
优化:
public class DoMove{

Moveable moveable;

public DoMove(Moveable moveable){
this.moveable = moveable;
}

public void reTime(){
System.out.print("调用前要处理的业务");
moveable.move();
System.out.print("调用后要处理的业务");
}
}




各位同志们能看懂这个好处吗??
也就是说只要实现了Moveable接口的都可以用了。
又是多态,再次申明 面向对象的核心是多态。


以上这个就是静态代理模式:用Car1去代理实现了Moveable的实现类。
被代理的类:只要是实现了Moveable的接口的类
代理类:DoMove类


也就是被代理类只需要做自己的事就可以了,不想做得业务交给DoMove去处理。这就是代理模式。
比如:歌星和经纪人。歌星是代理给了经纪人。

歌星只管唱歌,其他的琐事都交给经纪人去处理。



但是大家是否有考虑过,如果有很多需要被代理的类,那就必须要相应的有多少代理类?

我们有没有可能有一个代理类能代理我们所有被代理的类?

有,就是动态代理。

动态代理:就是用“被代理”的类动态的产生代理类。一般用接口去代替“被代理”类去产生代理类对象。接收产生代理类对象的刚好是“被代理”类的引用。

脑补一下,动态代理的作用不就是帮助接口引用生产代理对象嘛。


生成动态代理的类:Proxy类

自定义一下:Proxy类

就是用Proxy的产生代理对象的方法中传入“被代理”类的接口对象,用接口对象去生产一个实现此接口的类。

只不过这个过程是自己去拼接和封装的。

用字符串自动拼装出一个类出来,动态编译,加载,反射获取对象。


但是这里又一个问题来了,就是代理方法怎么去现实了?

代理方法可以用一个自定义处理器接口,然后不同的代理就创造不同的处理器。



总结一下:用Proxy产生代理对象,需要知道被代理类,和处理器。


代码片段:












0 0
原创粉丝点击