2012年7月24日星期二

创建函数来取代构造函数的类的设计



当你写一个程序,很多情况下,是很难找到一个最佳的解决方案不能,一个重要的部分是你可以做到这一点的最好的东西。 例如,正在使用Create函数的一类。 在下列情况下使用的类的创建函数。 答:作为最后检查错误,当你想给类分 两个。如果虚拟课堂 如果一个位拒收的外观细节。 例如,文件(图片)纹理读取的类,我想如果你说,一个典型的类看起来像下面的表格。 类GxSourceTexture:公共GxTexture { 市民: GxSourceTexture(); 虚拟GxSourceTexture(); 布尔负载(常量字符*文件名); ;} 我如何使用这个类如下:'LL。一个错误的彻底检查,如果 GxSourceTexture * pkSourceTexture =新GxSourceTexture(); 如果(pkSourceTexture == 0) {    错误处理; } 如果(!pkSourceTexture - >负载(“image.dds”)) {   错误处理;   删除pkSourceTexture; } 相当复杂的处理错误的,从文件中读取时,每次你必须GxSourceTexture。 如果这种情况下更容易处理如下。 类GxSourceTexture:公共GxTexture { 市民:   静态GxSourceTexture *创建(常量字符*文件名); 保护:   GxSourceTexture();   虚拟GxSourceTexture();   布尔负载(常量字符*文件名); ;} GxSourceTexture * GxSourceTexture ::创建(常量字符*文件名) {   GxSourceTexture * pkThis =新GxSourceTexture();   如果(pkThis = NULL)      返回NULL;   如果(pkThis - >负载(文件名))     返回pkThis;   删除pkThis;   返回NULL; } 如果你想创建计划内的GxSourceTexture   * GxSourceTexture pkSourceTexture = GxSourceTexture ::创建(“image.dds”);   如果(pkSourceTexture = NULL)   {      错误处理;   } 程序是干净多了,没有?同样,如果你想检查错误,当您创建,创建()函数为静态抓住一个良好的开端。这种方法是非常使用的技术。 现在,如果你看一下第二种情况下, 渲染例如,设计,我的DX9和OpenGL渲染想打开两个。在这种情况下,虚拟课堂将被使用。当您使用一个虚拟的类,创建功能,我们建议您使用。 现在,例如,如果程序... 类GxDX9Renderer:GxRenderer公共 {   GxDX9Renderer();   虚拟GXDX9Renderer(); ;} 类GXOGLRenderer:公共GxRenderer {   GXOGLRenderer();   虚拟的〜GxOGLRenderer(); ;} 类GxRenderer {   GxRenderer();   虚拟GxRenderer();   静态GxRenderer *创建(); ;} create()函数不使用,检查后渲染必须在程序中使用的类的支持。但是,创建()函数,然后在渲染GxRenderer最后指针,程序的入口和一个更紧凑,如果你的手GxRenderer.h可以工作,包括头文件。 仅特别是,在虚拟类并没有提供的,如果这样做,应用层和类GxOGLRenderer GxDX9Renderer类的头文件使该不会有知道的存在,也不是,到被添加库中的渲染类的目的实际源可以处理。 (无其他需要修改应用程序。) 除了这个,创建()函数可用于。 例如,如果您需要,以确保唯一性。在这种情况下,创建()函数可以使用,以确保唯一性。 此外,即使在一个共享的资源管理,创建()函数是可用的。例如,使用源纹理a.dds源很多时候,通过一个共享的资源管理,一旦实际SourceTexture使用,简单的方式,增加了引用变量的值可以使用的程序生成的文件。在这种情况下,用身体来解决如何复制对象类,但很多本身存在的类的对象的内存开销。 (3-D图形中的对象数目比多边形数量较小的内存开销是比较常见的结果。)

没有评论:

发表评论