博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《重构与模式(修订版)》—第1章1.2节模式万灵丹
阅读量:5934 次
发布时间:2019-06-19

本文共 1013 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区《重构与模式(修订版)》一书中的第1章1.2节模式万灵丹,作者【美】Joshua Kerievsky,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 模式万灵丹

重构与模式(修订版)
最初学习模式时,它们代表的是我很想精通的一种灵活、精妙甚至非常优雅的面向对象设计方法。完整地学习了无数的模式和模式语言之后,我用它们改进以前开发的系统,用它们构思将要开发的系统。其效果非常可观,我知道,自己的路子走对了。

然而,随着时间的推移,模式的强大使我开始对更简单的代码编写方式视而不见。只要遇到某个可以使用两三种不同方法进行的计算,我就会很快想到实现Strategy模式,而事实上,使用简单的条件表达式编程更加容易,也更加快捷,完全足够。

有一次,我对模式的走火入魔可以说是暴露无遗。在结对编程中,我和搭档编写了一个类,它实现了Java的TreeModel接口,在树型窗口部件(widget)中显示Spec对象的图形。代码能够工作,但是树型窗口部件通过调用Spec对象的toString()方法来显示它们,而该方法并不返回需要的Spec对象信息。我们不能修改Spec的toString()方法,因为系统的其他部分还要用到这个方法。我们只好慎重思考如何继续。和往常一样,我开始考虑哪个模式能够助我们一臂之力。脑子里浮现出Decorator模式。我建议,按照这个模式用一个对象封装Spec对象,再重写(override)这个对象的toString()方法。搭档对这条建议的反应使我大吃一惊:“在这里用Decorator模式?那不等于大炮打蚊子吗?”他的解决方案是,创建一个名为NodeDisplay的很小的类,将Spec对象作为其构造函数的参数,它的一个公共方法toString()包含了Spec对象的正确显示信息。NodeDisplay类编写起来几乎花不了多少时间,因为它的代码不超过10行。而我使用Decorator模式的解决方案至少需要50行代码,需要多次反复委托调用Spec对象。

这样的经验使我意识到,再也不能过多地考虑模式了,应该重新把精力放在短小、简单和直截了当的代码上。我走到了一个十字路口:我努力学习模式,想成为更优秀的软件设计师,然而,现在为了真正更上一层楼,我需要放弃对它们的依赖。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
Python爬虫入门教程 8-100 蜂鸟网图片爬取之三
查看>>
ip sla详解和实验
查看>>
Python 网络编程操作TCP/UDP 初探(二)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
mysql数据库备份和还原常用的命令
查看>>
SVN中分支合主干以及主干合分支分别怎么选择?
查看>>
我的友情链接
查看>>
PHP设计模式学习笔记: 命令模式(Command)
查看>>
2、Go HTTP框架Beego - Beego安装升级
查看>>
【CUBE】Oracle分组函数之CUBE魅力
查看>>
空行line.separator
查看>>
I2C器件的从设备地址设置
查看>>
Linux下安装配置Nexus
查看>>
wxpython笔记
查看>>
elipse设置maven仓库
查看>>
广深的VR配件产业
查看>>
MTK 系统主题配置注意事项
查看>>
android警告——Buttons in button bars should be border
查看>>
我的友情链接
查看>>