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

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

作者: goldroc | 来源:发表于2015-04-30 21:22 被阅读0次

《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自动提示功能可以用了。呵呵。
没有技术含量的文章,纯粹自娱自乐。

相关文章

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

    《design by contract》中除了介绍了Eiffel 语言,引入了前置条件,后置条件,不变量外。提出了...

  • Kotlin-面向对象-进阶

    扩展 扩展方法 Kotlin支持扩展方法和扩展属性。语法:被扩展的类/接口名.方法名() 父类不能使用子类的扩展方...

  • 接口

    接口关键字:interface, 实现implement 事物的扩展功能使用接口interface 类名{} 在类...

  • UML六种关系

    泛化:(Generalization):表示继承关系, 表示类/接口对父类/接口的功能扩展.java语法中的ext...

  • android巩固-kotlin第二篇

    类和对象 继承 接口 扩展 数据类和密封类

  • Java基础-接口与抽象类的区别

    抽象类与接口的区别 抽象类使用场景:如果多个类,然后有默认的实现。多继承:接口不断改变类扩展类的功能:使用抽象类如...

  • 装饰者模式

    在不能以继承的方式扩展类功能的情况下使用装饰者模式 接口 实现类 装饰者 使用

  • 提示三十八

    提示三十八:使用接口模拟可扩展的枚举。 因为枚举类无法被继承,作者为了扩展枚举,所以让他们共同实现了相同的接口,一...

  • JDK静态代理示例代码

    JDK静态代理示例代码 业务接口 接口的实现类 代理类,实现接口,并扩展实现类的功能 1、业务接口 2、业务实现类...

  • Java中3种代理总结

    1、JDK静态代理 业务接口 接口的实现类 代理类,实现接口,并扩展实现类的功能 2、JDK动态代理 业务接口 实...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/tscbfttx.html