Java设计模式在Common Lisp中的体现
最近在进一步学习Java的过程中,我愈发感到Java把面向对象的编程思想玩到了登峰造极的地步。而Java中最能表现面向对象编程思想的,就是大名鼎鼎的设计模式了。
这是Wikipedia中对设计模式的定义:设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类型或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类型或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
在学习了一些设计模式后,我们会发现这23种设计模式都围绕着以下三大基本原则:
- 中意于组合而不是继承。
- 依赖于接口而不是实现。
- 高内聚,低耦合。
不过,除了以上这些收获和感悟以外,我发现了一些更让人感兴趣的东西,这也是这篇文章马上要探讨的重点——Java设计模式在Common lisp中的体现。
Java和Common lisp, 前者作为OO的代表,喜欢玩类和对象;后者作为Functional Programming的代表,喜欢玩函数和闭包。乍一看它俩应该风马牛不相及,井水不犯河水,但实际上我们会惊讶地发现Java设计模式中有着太多Common Lisp的对照,这种现象让人越来越强烈地感觉:软件设计虽然有众多的门派、风格和表现形式,但总体思想上似乎是殊途同归的,比如构造抽象屏障和提高抽象层次。
Java至少有16种设计模式能对应到Common Lisp中,如下图:
Talk is cheap, let me ...
read more今天我终于有了自己的独立域名
今天折腾了半天,终于搞定了自己的独立域名:http://www.lizherui.com
整个过程颇为曲折:
- 去https://www.godaddy.com上用支付宝花80多块钱购买为期一年的顶级域名,并去修改Nameservers为这两个地址:f1g1ns1.dnspod.net、f1g1ns2.dnspod.net。
- 去https://www.dnspod.cn上添加新域名,并申请一条A记录指向Github Pages的ip:207.97.227.245;
- 在Pelican主目录新建CNAME文件,添上刚刚申请的域名:www.lizherui.com。
有了独立域名后,感觉非常爽,更加坚定了好好打理个人博客的决心。
read more爬取校招信息
抓取北邮人论坛和水木社区校招信息的爬虫程序, 直接运行main.py即可在本机(http://127.0.0.1:8888)访问,非常简洁,可以扩展。
此外,已经增加手机短信通知功能,移动、联通、电信都可以用。
Talk is cheap, show you the code:https://github.com/lizherui/spider_python.
Enjoy it.
read more编辑器与IDE
虽然eclim很强悍,但由于它并没有集成任何的java debug功能,因此用vim+eclim的组合开发java仍然显得力不从心。
我最终决定回到eclipse的怀抱中。同时,出于对逐渐丧失vim武功的担忧,我决定使用eclipse+viplugin的组合:编辑代码使用vim的指法,其它事情全部交给eclipse。
这样用了一段时间,节奏还不错,而且eclipse一些强大的功能让我刮目相看,并让我开始反思之前对待编辑器与IDE的态度。
IDE里面确实蕴含了比普通文本编辑器高级很多的技术。IDE会对程序文本进行真正的解析,之后才开始分析里面的结构。它们的“跳转到定义”一般都是很精确的跳转,而不是像文本编辑器那样瞎猜。
此外,IDE代码补全的精准度与速度都远远超过了vim的任何插件;IDE对于java的接口与实现、类与类的继承关系、反射等稍高级的功能都支持得非常好。
vim在这些方面确实做得不好,也不可能做得好。
这样说来,vim的唯一优势就只是它那极其符合人体工程学的指法带来的行云流水般的操作快感了。
不像php, python等所见即所得的解释性语言,java这种编译型的语言,若通过打日志来调试,那么每加一条调试用的日志代码,就要重新编译一次,实在是太低效了。而eclipse的调试功能确实是太强大了,调试过程中每个变量的值也都是清清楚楚。
很多长期使用vim/emacs的人都容易对IDE抱有或多或少的偏见。没错,开发shell, php, python, ruby这样的解释性语言,用vim/emacs确实非常合适 ...
read more