如何设计我的课程以扩展工厂并可扩展?

时间:2009-05-01 17:39:52

标签: c++ oop factory

我的c ++ SOA应用程序有一个“会话”概念,用于在服务之间交换数据。在示例中,它用于在执行提交或回滚更改的会话B之前检查某些服务的合法性。不管。

我有两种类型的会话模式:普通模式和假设模式。更进一步,我有不同的会话,合法会话,分配会话,提交会话等。这是一个主要问题。合法性会议可以是假设或真实的等等。

如何解决这个问题并避免代码重复?

我可以创建 ISessionFactory 接口并让 WhatIfFactory RealFactory 实现它。然后我可以创建一个 ILegalitySession 并使 WhatIfLegalitySession RealLegalitySession 实现它。然后我的工厂会返回适当的物品。

它有两个主要问题。如果有新模式怎么办?我将不得不为所有会议实施新工厂和新课程!如果有新会话类型怎么办?我必须改变两个工厂......

也许从2个hierarhies辞职并且有什么会话“装饰”真实会话? 如何本地化更改?

2 个答案:

答案 0 :(得分:1)

尝试使用装饰器实现WhatIf。或者提取一些“假设”特定部分作为一种策略。

另一种选择是使用State模式。 'WhatIf'状态和'真实'状态。

答案 1 :(得分:0)

我认为decorator pattern在这里有意义。您可能还想查看strategy pattern及其编译时的表兄policy-based design。没有更多信息,很难说哪个最好。装饰器非常适合添加其他行为,另外两个用于更改现有行为。