现在的位置: 首页 > 综合 > 正文

原型在程序中的另一种解释与应用

2013年02月20日 ⁄ 综合 ⁄ 共 602字 ⁄ 字号 评论关闭

在面向对象中,多态是一种奇妙的东西,我们很方便的让一个方法得到不同的实现,例如获取对象的类型名称。但是当我们需要列举所有的类型名称的时候,问题变得棘手起来,我们即便知道有哪些类型,但是不能获得类型的名称,因为获取类型名称的方法不是静态的。

这时候,我们需要的就是一个原型,所谓原型,在这里可以理解为类的一个对象,但是它不会用于正途,是一个原型,一个标本,一个样板,我们只是想要获取类型的名称,那么使用原型的方法即可。

具体做法是首先对于每一个类型创建一个原型对象,然后根据需要把这些对象存储在数据结构中,但是要保存的是父类指针,之后使用。

 

其实还有一种土办法,不那么优美,就是每个子类做个静态方法StaticGetTypeString(),然后让子类的虚方法调用相应类的静态方法。在列举所有类型名的时候,直接列举出每个类型的名称。

这样做的缺点:第一,每个类都有一个静态和一个动态方法,重复累赘。第二,列举名称要直接写出所有类型的方法调用,那么如果我还要列举别的属性呢?就要再列一遍,累死。如果用前面的办法就只需要循环遍历那个数据结构多次,即可。

 

总之,这种使用原型的方法来解决上述问题是一种非常优美的解决方案。但是它也存在缺点,比如原型什么都不干,那么如果原型有构造和析构函数,必须要特别注意,传递的参数要能兼容NULL,0等无效参数,使得原型能够正常创建。这一点上来说,破坏了类的稳定性。总之多方面权衡吧。

抱歉!评论已关闭.