首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Ruby设计形式系列之模板模式

2012-11-18 
Ruby设计模式系列之模板模式写过java的同学一定对java中无处不在的设计模式印象深刻。相比较而已ruby在设计

Ruby设计模式系列之模板模式
写过java的同学一定对java中无处不在的设计模式印象深刻。相比较而已ruby在设计模式这一块就显得稍微有些拿不出手了。作为一门动态到极致的语言,设计模式在ruby中的应用可能不太传统,有些许的变种。但万变不离其宗,在这里我们就通过一些ruby代码所描述的例子来理解和学习一些基本的设计模式。


上面的代码判断了format的类型,如果是html则打印html模板,如果是plain text则打印普通的文字模板。

我们可以很容易的看出上述代码的一些缺陷:
    扩展性差。若再添加1个format的话代码改动量还是很大的;    代码重复。print report的过程实际上都是一样的,每个format只是重复一下这个过程而已。
于是我们就需要一个更好的设计模式来解决这个问题。模板模式开始粉墨登场。

仔细的研究一下代码,我们发现下面的这些事情是一成不变的:

        打印header;    打印title;    打印报告的每一行;    打印报告的结尾;
我们可以把上面的”模板”性质的工作定义在一个模板类中,每个format都继承自这个模板基类,实现如下:



在Report基类中,由于ruby没有抽象方法的概念,所以我们使用raise exception的方式来模拟抽象方法被调用时所出现的异常。另外因为ruby1.9中编码的问题,我们调用encode ‘gb2312′方法来将字符串转码成gb2312编码,这样在控制台中能正常的显示中文,不会出现乱码。

热点排行