多态与继承(示例问题案例)

时间:2008-10-10 13:53:03

标签: design-patterns inheritance polymorphism factory

我仍然试图将设计模式包围起来,并且第二次我遇到了似乎迫切需要解决模式解决方案的问题。

我有一个包含多种帐户类型的帐户系统。我们有餐厅,酒店,service_provider和消费者帐户类型。我相信将来会有更多的商业帐户类型,当然还有一个全球管理员帐户。

所以我想知道如何实现帐户类型的切换。例如。每个帐户都有一个或多个配置文件,但配置文件将根据帐户类型而有所不同。我应该在这里用什么类关系来处理多种类型的帐户 - 多态或继承?

似乎应该有一个抽象的基础Profile类,其他配置文件应该扩展,但我不确定如何实现(例如,配置文件类型和帐户类型之间的连接表?)。

这也是一个实施工厂模式的机会,我只是不确定如何去做。

有什么想法吗?

*

*

编辑提供了一些建议的示例:

Account -> hasMany   -> Users

Account -> belongsTo -> AccountType

Account -> hasOne    -> Profile

个人资料根据帐户的类型而有所不同,例如,餐馆类型的帐户将有菜单,酒单等,类型酒店的帐户将有房型,便利设施,类型消费者的帐户将有个人品味,祖国等。

问题是什么设计模式最能实现这些关系。

希望更清楚,谢谢!

2 个答案:

答案 0 :(得分:1)

我建议聚合而不是继承这里的帐户和配置文件之间的关系,但有一个帐户基类继承到多个帐户类型。

该帐户包含一个配置文件对象,可以在每个多态帐户类型的构造函数中设置。

您也可以在工厂或虚拟构造函数模式中包装帐户。

答案 1 :(得分:0)

感谢这些例子;你可能试图让它变得更难。以下是否有效?

User <<--> Account
Account <<--> AccountType
Account <--> Profile
Profile <<--> ProfileType

我质疑帐户资料1:1的关系,似乎帐户最终可能会有多个个人资料,或者个人资料可能属于用户而不是帐户,但我真的不知道在这种情况下,个人资料是什么/做什么