`

一行“神奇”的代码

 
阅读更多
 

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

分享到:
评论

相关推荐

    世界第一高手的神奇代码

    3. **简洁性**:可能代码非常简洁,但功能强大,体现了编程的艺术性和“少即是多”的原则,如使用了一行代码解决复杂问题。 4. **可读性**:代码易于理解和维护,遵循良好的编码规范,即使对于不熟悉该领域的程序员...

    一个神奇的只有几行代码的Matlab程序-magic.rar

    一个神奇的只有几行代码的Matlab程序-magic.rar ff是(除%外)代码不过十行的程序. 但是运行起来有点诡异哦。 >> ff ans = 0 >> ff ans = 1 >> ff ans = 0 >> ff ans = 1 复制代码

    Sublime Text 3

    Sublime Text 是一个代码编辑器。也是HTML和散文先进的文本编辑器。漂亮的用户界面和非凡的功能,例如:迷你地图,多选择,Python插件,代码段等等。完全可自定义键绑定,菜单和工具栏等等.漂亮的用户界面和非凡的...

    Python 一行代码能实现丧心病狂的功能

    Python因其简洁明了的语法和强大的内置函数库,经常被用来实现一些看似复杂但用一行代码就能搞定的功能。本文将详细介绍Python一行代码能实现的几个典型功能,并对每个功能背后的逻辑进行解析。 首先,实现109张...

    超酷!25行as3代码可以有很神奇的效果。

    这篇描述提及的是一个AS3的演示项目,通过仅仅25行代码就实现了令人惊叹的视觉效果,尤其是提到了一个ASCII摄像机的功能。ASCII艺术是一种将图像转化为字符的艺术形式,而ASCII Cam则是将实时视频流转化为ASCII字符...

    android微信支付只需一行代码调用

    然后,就是调用那行神奇的代码。假设我们有一个名为`startWeChatPay`的静态方法,它接收预处理好的支付参数,并启动微信支付的流程。这行代码可能是这样的: ```java WxPayUtil.startWeChatPay(this, packageValue,...

    神奇代码复制不能复制的网页内容.pdf

    在这份文件中,标题和描述都提到了“神奇代码复制不能复制的网页内容.pdf”,这意味着文档所涉及的主题是关于如何通过JavaScript代码克服网页上的复制限制,从而使用户能够复制通常无法通过鼠标右键或Ctrl+C复制的...

    去掉这段代码的话在IE下显示会有问题

    --这是一行很神奇的注释,去掉的话在IE下显示会有问题,不知道为什么 -->”以及非标准的DOCTYPE声明可能共同作用于IE浏览器,以确保页面能够以一种较为正常的方式渲染。虽然具体的技术细节尚不清楚,但从实际应用的...

    一个神奇的打印乘法99表算法

    例如,第一行第一列的元素是1×1=1,第一行第二列的元素是1×2=2,以此类推。 在Java语言中,我们可以用嵌套循环来实现这个算法。`Multi99.java`文件很可能包含的就是这样的代码。通常,外层循环负责乘数(行),内...

    神奇的代码 通杀各种网站-可随意修改复制页面内容

    描述中提到的“在浏览器地址栏输入这一行代码”,这是指利用浏览器的JavaScript执行环境来运行代码。地址栏(也称为URL栏)不仅用于输入网址,还可以用于输入JavaScript命令,当按下回车键时,浏览器会尝试执行这些...

    Python趣味代码实现: 绘制过期、俄罗斯方块、人脸识别等 [源代码]

    六.Python 25行代码实现人脸识别 参考资料: 知乎 - 可以用 Python 编程语言做哪些神奇好玩的事情? 知乎 - 学习Python的迷茫,如何高效有趣地学习Python? 知乎 - 想知道大家都用python写过哪些有趣的脚本?

    浏览器分屏技巧,一行代码搞定!!!

    目录分屏效果神奇的一行代码修改书签中的网址附录 分屏效果 见证奇迹的时刻!!!然后让我们把时间回退30s,看看究竟发生了什么??? 神奇的一行代码 [removed][removed]('') 修改书签中的网址 创建一个书签

    apk反编译神奇

    APK是Android应用的安装包,由Java源代码经过编译、打包和签名等一系列过程生成。反编译即是对已编译的二进制代码进行解析,还原成可读的源代码或中间表示形式。这一过程通常涉及以下几个步骤: 1. **提取APK内容**...

    幻方 C++

    对于3x3的幻方,它有3行3列,目标是使每一行、每一列以及两条对角线上的三个数字之和都是相同的常数,这个常数通常是15(1+2+3+4+5+6+7+8+9的均值)。例如,经典的卢卡斯-勒让德幻方如下所示: ``` 4 9 2 3 5 7 8 1...

    精选编程、代码字体合集

    如果你写代码一直使用系统默认的字体,那么快点换一种编程字体吧,不仅能让代码一下子显得漂亮很多,而且字体的辨识率高了,多少也能提高点效率的。下面是字体的介绍和预览,为了方便大家下载,我已将全部字体的打包...

    IntelliJ IDEA 教程

    其实笔者也是一枚从Eclipse转IDEA的探索者,随着近期的不断开发实践和调试,逐步体会到这款智能IDE带来的巨大开发便利,在强大的插件功能支持下,诸如对Git和Maven的支持简直让人停不下来,各种代码提示,包括JS更是...

    神奇宝贝

    神奇宝贝,全称为《精灵宝可梦》(ポケットモンスター),是由日本Game Freak公司开发、任天堂发行的一款全球知名的角色扮演游戏系列。自1996年第一代作品《红·绿》在日本发布以来,该系列已经发展成为涵盖游戏、...

    live scripts神奇的实时脚本MATLAB.zip

    当你运行Live Script时,每一行代码都会立即执行,结果会自动更新到文档中,这使得调试和验证代码变得更加直观和高效。 Live Scripts的使用场景非常广泛,包括但不限于教学、研究和报告编写。在教学中,教师可以...

    详解QQDIY名片json代码.docx

    QQDIY名片是一种个性化的展示方式,通过JSON代码可以自定义名片的各个元素,包括背景图、点赞按钮、小图标以及各种文字颜色等。本文将深入解析如何利用JSON代码来设计一个独一无二的QQDIY名片。 首先,JSON...

    神奇的perl-最佳Perl入门

    - 使用正则表达式或`split`函数来分割每一行的数据。 #### 写文件 - 使用`open`函数以写入模式打开文件,并使用`print`或`write`函数写入数据。 #### 带格式输出Sprintf和printf - `sprintf`函数用于格式化字符...

Global site tag (gtag.js) - Google Analytics