最近在复习闫宏的《Java与模式》,在介绍责任链模式的时候文中使用了红楼中“击鼓传花”的例子。以前只是粗略的翻阅了一下,没有仔细的看其中的源码。今天仔细看了其中的代码,发现一个令人疑惑的地方,这行代码如下:
Player player = new JiaMu(new JiaZeng(new JiaBaoyu(new JiaHuan())));
刚开始感觉很神奇,但是仔细看了类图才明白这一串的new后面的对象都是继承于一个Player类。Player提供了一个构造方法:
class Player {
private Player player;
public Player(Player player) {
this.player = player;
}
}
按原来的结构,重新写了一个只与这行“神奇”代码相关的类,如下所示:
class JiaMu extends Player {
public JiaMu(Player player) {
super(player);
System.out.println(" 贾母传花ing...");
}
}
class JiaZeng extends Player {
public JiaZeng(Player player) {
super(player);
System.out.println(" 贾政传花ing...");
}
}
class JiaBaoyu extends Player {
public JiaBaoyu(Player player) {
super(player);
System.out.println(" 贾宝玉传花ing...");
}
}
class JiaHuan extends Player {
public JiaHuan(Player player) {
super(player);
System.out.println(" 贾环传花ing...");
}
}
public class Test {
public static void main(String[] args) {
Player player = new JiaMu(new JiaZeng(new JiaBaoyu(new JiaHuan(null))));
}
}
此时才知道自己也有些浮躁了,“路漫漫其修远兮,吾将上下而求索”,此时备感深刻。
“海纳百川,有容乃大,壁立千仞,无欲则刚。”
补充:
new JiaMu(new JiaZeng(new JiaBaoyu(new JiaHuan(null))));
该代码在此文责任链中的作用为:JiaMu后面的传花人为JiaZeng,jiaZeng后面的传花人为JiBaoyu,jiaBaoyu后面的传花人为JiaHuan,JiaHuan后面没有人接应,所以为null。