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去处理。这就是代理模式。
比如:歌星和经纪人。歌星是代理给了经纪人。
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
- java23种设计模式 代理模式(五)
- java23种设计模式之代理模式
- java23种设计模式--代理模式(proxy)
- 重学java23种设计模式(12)代理模式
- java23种设计模式五(连载)
- 走穿java23种设计模式-6代理模式
- Java23种设计模式——代理模式
- java23中设计模式之代理模式
- Java23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- JAVA23种设计模式
- java23种设计模式
- Java23种设计模式
- java23种设计模式
- altium designer绘制 pcb时怎么隐藏其中网络提示线
- JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
- 【杭电OJ】3790--最短路径(dijkstra)
- 排序篇(7)--快速排序
- [IOS APP]走遍美国-英语听力有声版
- java23种设计模式 代理模式(五)
- “玲珑杯”Round #11
- 基于LR的新闻多分类(基于spark2.1.0, 附完整代码)
- STL之vector内存释放
- C语言的复杂声明
- JDBC连结SQL数据库报错 ,权限不够
- 一致性哈希算法(consistent hashing)
- 初识JavaScript最容易模糊的三大问题
- 深度学习网络简介