如题

解决方案 »

  1.   

    之所以还要多提供一个类厂这样的机制,因为COM对象不一定非得分配在堆上,也可以分配在栈上。编的好一点的COM组件会根据自己的使用频率而使用不同的内存使用方式。因此类厂只是让COM组件可以自己处理创建的位置,增加内存使用的灵活性。要委托对于每个COM都存在的类厂去做这件事。而所有COM的类厂的是通用的。从而另COM库去使用相对简单的通用的类厂来创建COM。
      

  2.   

    类厂封装了com对象的创建,带来了更多的灵活性。
    可以看看IClassFactory2,如果没有类厂,怎么去实现这种灵活性呢?
      

  3.   

    我现在正在看《com本质论》
    说说自己看法(不一定对),高手指教:
    类厂(类对象)的必要性在于,com的封装性,如果要创建一个类对象,则必须要知道这个类的定义,但是com并没有将类的定义暴露给用户。所以要用类厂来创建对象。
      

  4.   

    有麻烦了,潘老师里面的,还是那本书上的,关于类唱创建gorila实例的时候,也看得不好。
    继续顶。
      

  5.   

    to  newkey007(无限天空) 
    我也曾从设计模式的角度来解释,但是,一般类厂模式是为了简化多个类的实例的创建过程,组件中只有一个组件类,你放在GetClassObject中和类厂的CreateInstance中有什么区别?而且引入类厂之后还要创建类厂对象,岂不是更麻烦?类厂创建组件是供组件编写者自己看,自己用的,所以sinall的观点好像不对吧,组件类是你写的,类厂还是你写的,关用户什么事?还是觉得neuboy(Lee) 的观点比较解释得通,但真的还没有见过把组件对象创建在栈上的。
      

  6.   

    说一下我的理解,因为创建对象时你并不一定知道你具体创建的对象是什么,所以需要委托类厂来创建。如果你每次都很清楚你创建的对象是什么,得却GetClassObject中和类厂的CreateInstance没什么区别。但事实时很多时候你只有到了运行时才知道你具体应该创建什么对象
      

  7.   

    to gaosl11
    “创建对象时你并不一定知道你具体创建的对象是什么,所以需要委托类厂来创建。“
    “事实时很多时候你只有到了运行时才知道你具体应该创建什么对象”可否举个例子?谢谢
      

  8.   

    实际上微软很多技术都是这样的,将具体的工作扔给一个类来完成,所有工作都放到每个单独的类去完成,尽量做到高内聚,低耦合。所以在COM中使用IClassFactory也是这个思路,让一个另外的类去干活,尽量低耦合。
      

  9.   

    依我所见。类厂是为创建多个类对象而实现的,在我们开发的COM组件中,可能包含多个类的定义,这时我们就可以实现类厂来统一创建这些类的实例!这不用每一个对象调用一个CoCreateInstance而可以先生成类厂,在用它来创建,其它对象实例。
      

  10.   

    如果你的COM组件只有一个类对象,那何必实现类厂呢!
      

  11.   

    我做了三四年的com,现在已经不看了,ms自己都要慢慢放弃,何况他本身就极其复杂,何必浪费时间呢?
    现在要看com只要学习它所体现的组件思想就行了吧!
    个人意见而已!
      

  12.   

    类厂是必须的!!!原因就是上面的neuboy(Lee)所说的对象可以以不同的形式存在,提高灵活性,也就是提高内存利用率,比如用类厂实现类似COM+的对象池技术等来优化执行效率。再就是如上面的gaosl11(gaosl11)所说的COM组件的方法不是像DLL那样通过输出节来暴露的函数地址的,而是通过虚函数的形式,既通过动态分配的一个指针(函数指针,也就是接口指针)所指向的函数地址数组,用数组元素来暴露相应的函数地址。不同的COM组件就会有不同的地址数组(即使接口指针相同,如都为IUnknown*,函数指针数组也不同)。这个函数指针数组就是由类厂来填写的,因此类厂是必须的。