GLC:
装饰者模式就是反复用继承 多态
GLC:
如果我们现有一个类 里面有方法a 我们想对方法a增强 加点别的功能
GLC:
但是又不想改动原有类A
GLC:
那么 我们可以写个装饰类b 和类A实现同样的接口,或者,继承类A
GLC:
然后,装饰者类B里面,通过持有类A的接口的引用,并且提供构造方法给该引用赋值
GLC:
这一步的目的是,要传进来装饰者B的子类,他们实现了不同的装饰功能,把他们传进来之后,调用他们实现的方法(最终重写的类a的方法),此时已经在具体的装饰类中实现了方法扩展
GLC:
这样的我们每一个装饰类都是独立的
GLC:
而被装饰类A并没有动过
GLC:
而且,装饰类的功能顺序可以调整
GLC:
比较灵活
GLC:
说到这里 仍然不太清楚和代理模式具体区别
GLC:
感觉还是和代理模式挺像
GLC:
那个逼问的这个问题 还挺不好答
GLC:
估计是自己也不会的 或者琢磨很久的
GLC:
装饰模式,说白了就是我想给现有的某个方法加点逻辑,但是我又不想改动原类,那咋整,只能通过继承,我不改你,但是我继承你,然后重写你的方法,重写了之后我还调用你的逻辑,然后接着写我要增强的
GLC:
这里有个点,还运用了多态
GLC:
那就是设计了两级,一级是父类装饰类,而每个具体装饰类都实现了共同的父装饰类,为啥弄个父装饰类呢?这货实现了一个通用的功能,就是持有被增强方法接口引用,setter注入为该引用赋值。吧这个逻辑放到了父类装饰类完成,就不用每个具体装饰类都写了
GLC:
每个具体的装饰类,只专心写自己的增强逻辑即可。
GLC:
[图片]
GLC:
说白了就是封装 继承 多态
GLC:
java的一切设计模式 都逃不过这三点
张青:
什么场景中会用
GLC:
你需要增强你的某个方法
GLC:
但是你不想改动原有类。