包含/委托

COM 中用于对象重用的最常用机制是包含/委托。 这种类型的重用是大多数面向对象的语言和系统中令人熟悉的概念。 需要使用内部对象的外部对象充当内部对象的对象客户端。 外部对象“包含”内部对象,当外部对象需要内部对象的服务时,外部对象将实现显式委托给内部对象的方法。 也就是说,外部对象使用内部对象的服务来实现自身。

外部对象和内部对象不需要支持相同的接口,但仅作为对内部对象中相应方法的调用,包含实现外部对象不实现的接口的对象和实现外部对象的方法肯定是合理的。 但是,当外部对象和内部对象的复杂性大相径庭时,外部对象可以通过委托对在内部对象中实现的接口方法的调用来实现其接口的某些方法。

为外部对象实现包含非常简单。 外部对象会创建自己需要使用的内部对象,就像任何其他客户端一样。 这并不新鲜,该过程就像 C++ 对象一样,该对象本身包含用于执行某些字符串函数的 C++ 字符串对象,即使外部对象不被视为其自己的权限中的字符串对象也是如此。 然后,使用其指向内部对象的指针,对外部对象中方法的调用将生成对内部对象方法的调用。

聚合