读书人

使用类时的疑惑,该怎么解决

发布时间: 2012-03-05 11:54:01 作者: rapoo

使用类时的疑惑
我才刚刚开始面向对象,问题可能比较幼稚,大家不要笑哦。

假设我的系统要管理人,白人,黑人等等,并要存入数据库中。那么很自然,我抽象了一个TPeople类,定义了虚方法:ReadFromDB、InsertToDB、UpdateToDB等(它们的功能是可以插入、更新数据库中的信息,也从数据库中取出符合要求的某个人);然后我泛化出TWhitePeople和TBlackPeople,同时重载并实现刚才提到的方法。

为了与数据集良好衔接,我又抽象了一个复数的TPeoples类,继承自TCollection,同时修改了TPeople类继承自TCollectionItem,这样通过实现Add,Delete等方法就可以和数据集保持一致了。如果所有的数据都存到同一个表里,当然不会有问题了,但问题是一类人就是一个表,毕竟他们除了相同的属性外(字段)其他的都不一样了!

于是我又从TPeoples泛化出对应的TWhitePeoples和TBlackPeoples,它们使用各自对应的数据集。我想这样应该能工作。

但是,如果哪天要加入黄种人怎么办?难道一样要再泛化出TYellowPeoples?再加入棕色人种呢?仍然依此类推?是不是太没有效率了?有没有更好的方法呢?

[解决办法]
是不是用工厂模式比较好
[解决办法]
看看设计模式吧!
[解决办法]
但问题是一类人就是一个表,毕竟他们除了相同的属性外(字段)其他的都不一样了!

个人意见是从TPeoples派生出不同的人种,因为一类人种,毕竟他们存在差异,从业务逻辑上来说,就是不同的业务需求。

定义时,m_Peoples: TPeoples;

实例化,m_Poeples := TYellowPeoples.Create;
[解决办法]
你用的这种设计,和Factory Method比较像
这种设计缺点就是不能很好的适应变化,在处理增加、删除类的时候,改动量比较大

你可以采用Prototype模式,用数组或者TList一类的定义一个prototype mamager,
然后将各种人加入prototype mamager,需要使用什么样的人,就clone一个

读书人网 >.NET

热点推荐