`
guoyiqi
  • 浏览: 966194 次
社区版块
存档分类
最新评论

关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明

 
阅读更多

最近在看GoF的《设计模式》,在此之前看了John Vlissides的《设计模式沉思录》,在“沉思录”P42页脚注中,作者提到

,作者可谓点到即止。


而在《设计模式》P102页的下边部分


什么是‘常露齿嘻笑的猫’(Cheshire Cat)?(转自:http://baike.soso.com/h7921075.htm?sp=l7921076


那Cheshire Cat到底讲的是什么回事呢?去http://www.acm.org/sigs查,未果。按照GoF的参考文献上说,Cheshire Cat来自于John Carolan在1989年的文章“Constructing bullet-proof classes”,索性去Google搜这篇文章吧~


没找到原文,但找到了篇引用原文的文章:http://wiki.hsr.ch/Prog3/files/overload72-FINAL_DesigningHeaderFiles.pdf



译文如下:

Cheshire Cat的示例代码如下:


朴实示例代码如下:


可以发现,如果用户使用


则朴实代码中的所有private权限的变量将全部可见!完全无法隐藏!

而Cheshire Cat代码中,由于没有在文件中定义成员变量(至少没有定义那么多敏感成员变量),所以Cheshire Cat代码不会暴露实现细节,顶多是暴露了



而如果class telephone_list_implementation的实现是在一个lib或dll文件中,那么用户根本无法通过

方式使class telephone_list_implementation的细节暴露!因为用户没有class telephone_list_implementation的源代码……

用户拿到的最多是telephone_list_implementation* rep,而无法暴露telephone_list_implementation* rep的细节。







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics