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

关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(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的细节。







分享到:
评论

相关推荐

    c++堆栈的建立运用Cheshire cat技术

    Cheshire Cat技术,源自《爱丽丝梦游仙境》中那只能消失只剩笑容的猫,它的概念在编程中被用来实现一种类的隐藏技术,使得类的部分成员在某些特定情况下变得不可见或不可访问,增加了代码的灵活性和安全性。...

    Cheshire Cat Screen Share-crx插件

    - **兼容性**: 由于是基于Chrome浏览器的扩展,Cheshire Cat Screen Share 可能会与大多数现代浏览器兼容,但可能不适用于其他非Chrome内核的浏览器。 **3. 使用方法** 安装Cheshire Cat Screen Share.crx文件是将...

    cheshire-cat:《活着的Clojure》书中的示例

    柴郡猫(cheshire-cat)是这本书中的一个特定示例,它可能涉及Clojure的核心概念、函数式编程实践以及与JavaScript的交互。 在Clojure中,函数式编程是一个核心特性,它鼓励程序员使用纯函数和不可变数据结构。这个...

    cheshire-cat:生活Clojure的示例

    柴郡猫 生活Clojure中的示例 先决条件 您将需要安装 2.0.0或更高版本。 跑步 要为该应用程序启动Web服务器,请运行: lein ring server 执照 版权所有:copyright:2015 FIXME

    cheshire3:Cheshire3搜索引擎和信息框架

    柴郡3 2014年7月24日(2014-06-24) 内容创建一个新的数据库将数据加载到数据库中搜索数据库通过SRU公开数据库Python API 初始化Cheshire3架构使用cheshire3命令加载数据中预处理(预解析) 搜寻中正在检索转换记录...

    cheshire-cat:clojurescript http-repl练习

    柴郡猫整我先决条件您将需要安装 2.0.0或更高版本。跑步要为该应用程序启动Web服务器,请运行: lein ring server执照版权所有:copyright:2015 FIXME

    cheshire-5.10.0.jar

    JSON and JSON SMILE encoding, fast. JSON and JSON SMILE encoding, fast.

    Cheshire3-开源

    Cheshire3 是一个快速的 Z39.50、SRW、XML 搜索引擎,用 Python 编写以实现可扩展性并使用 C 库以提高速度。 下一代 Cheshire 系统 (http://cheshire.berkeley.edu) 并围绕可分发的面向对象模型设计。

    重子作为量子霍尔液滴和Quark-Hadron对偶

    我们表明,最近提出的将Nf = 1重子描述为量子霍尔液滴的大量色限可以理解为使用Cheshire Cat原理在(1 + 2)维条带中的手性袋。 对于较小的袋子半径,袋子会减小到涡流线,这是猫的笑容,无间隙的夸克在同一方向上...

    cheshire:Clojure JSON和JSON SMILE(二进制JSON格式)encodingdecoding

    “ Cheshire Puss,”她有点胆怯地开始,因为她根本不知道它是否想要这个名字:但是,它笑得更宽了一点。 “来吧,到目前为止很高兴。”爱丽丝想,然后继续。 “你能告诉我,我应该从这走哪条路?” 猫说:“这取...

    外研版8上M7U1Alicewassittingwithhersisterbytheriver.ppt

    课件中还提及了一些故事中的角色,如柴郡猫(the Cheshire Cat)、红桃皇后(the Queen of Hearts)、疯帽匠(the Mad Hatter)、三月兔和老鼠(the March Hare and a mouse)、白兔(the white Rabbit)以及主角...

    3D N $$ \ mathcal {N} $$ = 2个场论的Picard-Lefschetz分解和柴郡猫复活

    我们研究了三维N $$ \ mathcal {N} $$ = 2超对称... 第二个问题是通过使物质含量变形并使超对称理论的Cheshire Cat重现结构得以体现来解决的,这使我们即使在截断了扰动数据的情况下也能从扰动数据中重建非扰动信息。

    开学了,有路网团购太便宜啦! C++编程惯用法(高级程序员常用方法和技巧)/深入C++系列(C++ Strategies and Tactics)

    一开始书中会给出一个关于它们应该用在设计的什么地方的讨论,然后就是一些详细的示例代码,用来向我们演示如何在实践中使用这些概念。对于 mulu 代译者序 序 第0章 简介 0.1 关于示例代码 0.2 本书的组织 0.3 问题 ...

    选修moduleReadingPracticePPT学习教案.pptx

    在学习过程中,PPT还引用了一些具体事实,如狄更斯喜欢的酒馆Ye Old Cheshire Cheese,以及现在伦敦的现代化面貌和清洁空气,这些都是对过去和现在伦敦差异的说明。此外,提到了一些历史地标,如Southwark、乔治旅馆...

    与动物有关的英文谚语.doc

    45. "grin like a Cheshire cat" 形容傻笑或狡黠的笑容,源自《爱丽丝梦游仙境》中的一只猫。 46. "white elephant" 指无用且负担沉重的礼物,也可能指耗费大量资源却无实际用途的事物。 47. "wild-goose chase" ...

    c++编程思想

    句柄类是一种常用的设计模式,用于隐藏类的具体实现细节,同时减少重复编译的问题。通常的做法是将类的私有部分放在一个内部结构体中,只在类定义中声明指向该结构体的指针,而不暴露结构体的具体定义。例如: ```...

    八年级英语上册Module7Afamousstory知识点归纳新版外研版202005051125

    在《爱丽丝梦游奇境》的故事中,我们介绍了多个角色,如"the Mad Hatter"(疯帽匠)、"the March Hare"(三月兔)、"the White Rabbit"(白兔)、"the Cheshire Cat"(柴郡猫)和"the Queen of Hearts"(红桃王后)...

    Cheshireinitials

    在IT领域,设计与视觉呈现的重要性日益凸显,其中字体作为信息传递的重要载体,其独特性与美感往往能直接影响到整体设计的效果。"Cheshireinitials",这个名字或许对许多人来说还比较陌生,但它在字体设计界却是一个...

    json-schema:JSON模式验证器

    当前包含一个使用cheshire解析JSON的可用JSON模式验证器。 使用$ ref支持链接模式,并允许用户指定如何加载链接URI。 地位 该项目已针对进行了测试,并通过了大多数测试。 宏版本存在递归和庞大模式的问题。 稍后...

    AZ-900: Microsoft Azure Fundamentals

    Microsoft Azure Fundamentals (AZ-900) 是微软提供的一项基础认证考试,旨在为考生提供对云计算概念、Azure 服务、安全性、隐私性以及 Azure 的定价和支持模式的基本理解。这个认证适合初学者和非技术人员,帮助...

Global site tag (gtag.js) - Google Analytics