使用嵌套类来清晰化类接口,分离扩展操作和扩展查询

《design by contract》中除了介绍了Eiffel 语言,引入了前置条件,后置条件,不变量外。提出了基本操作,基本查询,扩展操作,扩展查询的概念。

《effective c++》中也提到应该把扩展查询的成员函数替换为非成员函数。理由是为了较低的编译依赖性,较好的可延伸性,以及较高的封装性。

其实,Scott Meyers就是说把扩展查询放到类的外部去,作为一个utility 函数或类来使用。

我能理解他说的话,区别基本查询和扩展查询的确可以纯化类的接口,把把我们从大量的类方法记忆中解放出来。但我不愿意把原先对于一个类的使用变成了一个类加多个utility 方法或再加一个utility 类。至少我需要记忆的更多了,而且IDE 的智能提示功能似乎也用不上了。

最好,能得了便宜又可以卖乖。

那把utility 直接放到类里,声明成nested class,虽然没有较低的编译依赖性,但的确可以知道并选择使用扩展查询了。当然,这种方法肯定不是Scott Meyers 建议的。

class Act
{
public:
 Act():_(*this){}
 void clearText();
 void clearIcon();

 class Util{
  public:
  Util(Act& a):owner(a){}
   void clearAll(){
     owner.clearText();
     owner.clearIcon();
   }
  private:
   Act& owner;
 } _;
};

其中clearAll 是扩展操作,调用了基本操作clearText() and clearIcon().
这样,对Act 的直接操作都是基本操作和基本查询:act.clearText();
如果使用扩展查询则使用: act._.clearAll();
最好的是,IDE自动提示功能可以用了。呵呵。
没有技术含量的文章,纯粹自娱自乐。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,715评论 25 709
  • 心是个角落 弱比拳拳 心是个房间 容量无限 若说神奇 没有能敌它的硬盘 损坏了还能修复 迷失了还能搜索 破碎了也还...
    微雨凭栏阅读 1,599评论 4 6
  • 童蒙班在本周进步颇大,主要进步如下 1、上课表现 上课表现进步最大的有熊邦智和任天浩。能够在上课时认真听讲而不做其...
    陈建鸿阅读 1,586评论 0 0
  • 有些人没被偷过,站在道德的制高点义正严辞的宽慰偷盗者,三个月前,我手机电脑钱包全部被偷身无分文,夜晚站在长沙坡子街...
    矞倾阅读 1,280评论 0 0
  • 今天的我,心情不好,你要问我为什么,原因有很多,可能就是因为种种事情交叉在一起,所以我很难过。 有的人通过...
    吃了胖阅读 988评论 2 1