一行“神奇”的代码

 

 最近在复习闫宏的《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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值