我承认我学的东西太杂了。
首先是factory method模式,即工厂方法。
设计模式是这么说的:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
我理解的就是,可以通过一个接口去创建多种对象,C++中其实就是利用虚函数的原理,我不需要知道现在我到底拥有哪个工厂。
拿ArchiveFactory做例子。
class _OgreExport FileSystemArchiveFactory : public ArchiveFactoryclass _OgrePrivate ZipArchiveFactory : public ArchiveFactory
class _OgreExport FileSystemArchive : public Archive class _OgreExport ZipArchive : public Archive
ArchiveFactory是一个虚类,有两个子类FileSystemArchiveFactory和ZipArchiveFactory,需要创建的对象就是FileSystemArchive和ZipArchive。
其实首先我们应该在头脑中清晰的就是Archive到底用在哪些场合了。在ogre中,其实FileSystemArchiveFactory和ZipArchiveFactory都不会直接被客户所使用,而是通过ArchiveManager来间接使用的,就是装载文件夹或者zip压缩包。
Archive* ArchiveManager::load( const String& filename, const String& archiveType)就是这个函数。ArchiveManager中有这么几个成员
typedef map<String, ArchiveFactory*>::type ArchiveFactoryMap;
ArchiveFactoryMap mArchFactories;
typedef map<String, Archive*>::type ArchiveMap;
ArchiveMap mArchives;他的方法也很少,总之是个很好理解的类。
还有粒子系统也用了工厂方法模式:
class _OgreExport ParticleSystemRendererFactory : public FactoryObj<ParticleSystemRenderer>, public FXAllocclass _OgreExport BillboardParticleRendererFactory : public ParticleSystemRendererFactoryParticleSystemManager作为接口
class _OgreExport ParticleSystemManager:
public Singleton<ParticleSystemManager>, public ScriptLoader, public FXAlloc这个类没用过,没发言权。
本文探讨了在Ogre中如何通过工厂方法模式实现对象创建的灵活性与复用性,具体分析了ArchiveManager与ArchiveFactory在文件管理与加载中的作用,以及粒子系统渲染的工厂方法应用。
1740

被折叠的 条评论
为什么被折叠?



