最近在看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的细节。
分享到:
相关推荐
运用Cheshire cat技术创建的堆栈实现了类的隐藏技术 广泛运用于编程当中
语言:日本語 与柴郡猫共享! Cheshire Cat Web会议系统可以共享屏幕共享。
柴郡猫《活着的Clojure》书中的示例先决条件您将需要安装 2.0.0或更高版本。跑步要为该应用程序启动Web服务器,请运行: lein ring server
柴郡猫 生活Clojure中的示例 先决条件 您将需要安装 2.0.0或更高版本。 跑步 要为该应用程序启动Web服务器,请运行: lein ring server 执照 版权所有:copyright:2015 FIXME
柴郡3 2014年7月24日(2014-06-24) 内容创建一个新的数据库将数据加载到数据库中搜索数据库通过SRU公开数据库Python API 初始化Cheshire3架构使用cheshire3命令加载数据中预处理(预解析) 搜寻中正在检索转换记录...
柴郡猫整我先决条件您将需要安装 2.0.0或更高版本。跑步要为该应用程序启动Web服务器,请运行: lein ring server执照版权所有:copyright:2015 FIXME
JSON and JSON SMILE encoding, fast. JSON and JSON SMILE encoding, fast.
Cheshire3 是一个快速的 Z39.50、SRW、XML 搜索引擎,用 Python 编写以实现可扩展性并使用 C 库以提高速度。 下一代 Cheshire 系统 (http://cheshire.berkeley.edu) 并围绕可分发的面向对象模型设计。
我们表明,最近提出的将Nf = 1重子描述为量子霍尔液滴的大量色限可以理解为使用Cheshire Cat原理在(1 + 2)维条带中的手性袋。 对于较小的袋子半径,袋子会减小到涡流线,这是猫的笑容,无间隙的夸克在同一方向上...
“ Cheshire Puss,”她有点胆怯地开始,因为她根本不知道它是否想要这个名字:但是,它笑得更宽了一点。 “来吧,到目前为止很高兴。”爱丽丝想,然后继续。 “你能告诉我,我应该从这走哪条路?” 猫说:“这取...
我们研究了三维N $$ \ mathcal {N} $$ = 2超对称... 第二个问题是通过使物质含量变形并使超对称理论的Cheshire Cat重现结构得以体现来解决的,这使我们即使在截断了扰动数据的情况下也能从扰动数据中重建非扰动信息。
一开始书中会给出一个关于它们应该用在设计的什么地方的讨论,然后就是一些详细的示例代码,用来向我们演示如何在实践中使用这些概念。对于 mulu 代译者序 序 第0章 简介 0.1 关于示例代码 0.2 本书的组织 0.3 问题 ...
当前包含一个使用cheshire解析JSON的可用JSON模式验证器。 使用$ ref支持链接模式,并允许用户指定如何加载链接URI。 地位 该项目已针对进行了测试,并通过了大多数测试。 宏版本存在递归和庞大模式的问题。 稍后...
用于Canary测试柴郡建筑的CI触发器的示例项目
Jim Cheshire讲授使用Expression Web设计实际网站的权威人士技巧。从创建窗体和表,创建和修改模版,建立可访问站点,使用CSS和XML数据,到创建动态页面和发布站点,Jim展示了如何使用Expression Web完成网站设计与...
Jim Cheshire讲授使用Expression Web设计实际网站的权威人士技巧。从创建窗体和表,创建和修改模版,建立可访问站点,使用CSS和XML数据,到创建动态页面和发布站点,Jim展示了如何使用Expression Web完成网站设计与...
測驗 AZ-900: Microsoft Azure Fundamentals
密西西比州立大学专业:软件工程类别:CSE4633人工智能任期:2020年秋季老师:埃里克·汉森(Eric Hansen)博士描述简介:关于python人脸识别的最终项目用法去做文件树和说明FacialRecognition├──Report| ├──...
Home Buyer(Beta)每次使用其他用户访问网站时收集价格信息,所以用户越多,信息就越准确,所以与您的朋友分享此工具并帮助购买社区。我们欢迎您可能拥有的任何反馈意见。我们一直在努力添加更多信息,如当地工资,...
启用“开发人员模式”。 单击“加载解压的扩展...”,然后选择此存储库的扩展/目录。谢谢超级马里奥和塞尔达传说音效属于任天堂。 《守望先锋》和《魔兽争霸II》的音效属于暴雪。 我声称没有所有权,我只是粉丝。 :...