JAVA装饰者模式
JAVA装饰者模式(在写数据库连接池中所遇到的,通过内存图加以理解。)
首先,关于装饰者模式(对其有基本了解的可以跳过)
装饰者模式是摒弃了继承所带来的高耦合的不利因素而同时又能对方法进行‘重写’以达到使用者目的的一种思想。刚开始我也是被绕进去了,甚至觉得它像是不改变参数列表的重载,后来自己画了内存图才理顺。
写装饰类必须要用到的几个步骤:
1.装饰者和被装饰者实现同一个接口或者继承同一个类
2.装饰者中要有被装饰者的引用
3.对需要增强的方法进行加强
4.对不需要加强的方法调用原来方法
所用到的代码(一个接口三个类)
这几段代码所要表达的意思就是将大众汽车的方法run加强,到达到跑车的层次。
一个以Car命名的接口
public interface Car {
void run();
void stop();
}
一个以Dazhong命名的汽车类并实现了接口
public class DZ implements Car {
@Override
public void run() {
System.out.println("大众在跑");
}
@Override
public void stop() {
System.out.println("刹车");
}
}
一个以Paoche命名的汽车类并实现了接口
public class PaoChe implements Car {
private Car car;
public PaoChe(Car car){
this.car=car;
}
@Override
public void run() {
System.out.println("加上引擎");
System.out.println("我终于可以10秒破千了..");
}
@Override
public void stop() {
car.stop();
}
}
main方法
public class GO {
public static void main(String[] args) {
DZ dazhong = new DZ();
/*dazhong.run();
dazhong.stop();*/
PaoChe pc = new PaoChe(dazhong);
pc.run();
pc.stop();
}
}
输出结果:那肯定是:加上引擎可以10秒破千。刹车。
代码中不好理解的地方在于:在跑车类中对大众类的引用,这里使用跑车的含参构造方法,将dazhong当对象传了进去。这里运用了多态的思想。一直是父接口指向子实现类DZ,我现在理解了让我再回想当时卡壳的地方我就觉得很傻,那我直接上内存图吧。
内存图理解加以解释
有点乱将就着看,后面再写一篇关于连接池的装饰者模式。