虽然我用了一段时间的COM,但是一直不能理解类厂的必要性,甚至有人说类厂可以实现语言的独立性/无关性,对此,各位有何高见? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 之所以还要多提供一个类厂这样的机制,因为COM对象不一定非得分配在堆上,也可以分配在栈上。编的好一点的COM组件会根据自己的使用频率而使用不同的内存使用方式。因此类厂只是让COM组件可以自己处理创建的位置,增加内存使用的灵活性。要委托对于每个COM都存在的类厂去做这件事。而所有COM的类厂的是通用的。从而另COM库去使用相对简单的通用的类厂来创建COM。 类厂封装了com对象的创建,带来了更多的灵活性。可以看看IClassFactory2,如果没有类厂,怎么去实现这种灵活性呢? 我现在正在看《com本质论》说说自己看法(不一定对),高手指教:类厂(类对象)的必要性在于,com的封装性,如果要创建一个类对象,则必须要知道这个类的定义,但是com并没有将类的定义暴露给用户。所以要用类厂来创建对象。 有麻烦了,潘老师里面的,还是那本书上的,关于类唱创建gorila实例的时候,也看得不好。继续顶。 to newkey007(无限天空) 我也曾从设计模式的角度来解释,但是,一般类厂模式是为了简化多个类的实例的创建过程,组件中只有一个组件类,你放在GetClassObject中和类厂的CreateInstance中有什么区别?而且引入类厂之后还要创建类厂对象,岂不是更麻烦?类厂创建组件是供组件编写者自己看,自己用的,所以sinall的观点好像不对吧,组件类是你写的,类厂还是你写的,关用户什么事?还是觉得neuboy(Lee) 的观点比较解释得通,但真的还没有见过把组件对象创建在栈上的。 说一下我的理解,因为创建对象时你并不一定知道你具体创建的对象是什么,所以需要委托类厂来创建。如果你每次都很清楚你创建的对象是什么,得却GetClassObject中和类厂的CreateInstance没什么区别。但事实时很多时候你只有到了运行时才知道你具体应该创建什么对象 to gaosl11“创建对象时你并不一定知道你具体创建的对象是什么,所以需要委托类厂来创建。““事实时很多时候你只有到了运行时才知道你具体应该创建什么对象”可否举个例子?谢谢 实际上微软很多技术都是这样的,将具体的工作扔给一个类来完成,所有工作都放到每个单独的类去完成,尽量做到高内聚,低耦合。所以在COM中使用IClassFactory也是这个思路,让一个另外的类去干活,尽量低耦合。 依我所见。类厂是为创建多个类对象而实现的,在我们开发的COM组件中,可能包含多个类的定义,这时我们就可以实现类厂来统一创建这些类的实例!这不用每一个对象调用一个CoCreateInstance而可以先生成类厂,在用它来创建,其它对象实例。 如果你的COM组件只有一个类对象,那何必实现类厂呢! 我做了三四年的com,现在已经不看了,ms自己都要慢慢放弃,何况他本身就极其复杂,何必浪费时间呢?现在要看com只要学习它所体现的组件思想就行了吧!个人意见而已! 类厂是必须的!!!原因就是上面的neuboy(Lee)所说的对象可以以不同的形式存在,提高灵活性,也就是提高内存利用率,比如用类厂实现类似COM+的对象池技术等来优化执行效率。再就是如上面的gaosl11(gaosl11)所说的COM组件的方法不是像DLL那样通过输出节来暴露的函数地址的,而是通过虚函数的形式,既通过动态分配的一个指针(函数指针,也就是接口指针)所指向的函数地址数组,用数组元素来暴露相应的函数地址。不同的COM组件就会有不同的地址数组(即使接口指针相同,如都为IUnknown*,函数指针数组也不同)。这个函数指针数组就是由类厂来填写的,因此类厂是必须的。 如何修改Check Box字体颜色 怎么在主窗口载入的时候,一起加载子窗口的内容 怎么获得操作系统安装目录?怎么复制文件? WM_PRINT消息在对话框里面可以用吗? 程序消失,急急急在线等 一个对于高手来说相当简单的问题 程序运行到m_pSocket->Create()就不动了,为什么? 我干MFC 1.5年,才涨了200,大家说还有更坑爹的吗? 我正在学习VC,但VC中的许多结构和数据类型如HINSTANCE、LRESULT等不了解。 win32 如何删除已显示的位图 200分求解,直到GPS,北京灵图的请进,提供想法这有分,能解决者给Money! 高手请进!!!一个关于文件夹的问题。
可以看看IClassFactory2,如果没有类厂,怎么去实现这种灵活性呢?
说说自己看法(不一定对),高手指教:
类厂(类对象)的必要性在于,com的封装性,如果要创建一个类对象,则必须要知道这个类的定义,但是com并没有将类的定义暴露给用户。所以要用类厂来创建对象。
继续顶。
我也曾从设计模式的角度来解释,但是,一般类厂模式是为了简化多个类的实例的创建过程,组件中只有一个组件类,你放在GetClassObject中和类厂的CreateInstance中有什么区别?而且引入类厂之后还要创建类厂对象,岂不是更麻烦?类厂创建组件是供组件编写者自己看,自己用的,所以sinall的观点好像不对吧,组件类是你写的,类厂还是你写的,关用户什么事?还是觉得neuboy(Lee) 的观点比较解释得通,但真的还没有见过把组件对象创建在栈上的。
“创建对象时你并不一定知道你具体创建的对象是什么,所以需要委托类厂来创建。“
“事实时很多时候你只有到了运行时才知道你具体应该创建什么对象”可否举个例子?谢谢
现在要看com只要学习它所体现的组件思想就行了吧!
个人意见而已!