1

我有一些条件,例如-

List globalList = new ArrayList();
if(X.isExists)
  globalList(new XBasedClass());
if(Y.isExists && Z.isExists)
  globalList(new ZYBasedClass());
else if(Y.isExists || Z.isExists)
  globalList(new CommonBasedClass());
if(N.isExists)
....

首先我想到了使用State Pattern,但我意识到对于每个条件我都需要声明类,并且我想限制类的数量。

其次,我想到了使用装饰器模式,但再次需要进行上述条件检查,如果需要,那么上述循环是否会产生任何问题。

我的条件只需要在 List 中添加新类,没有别的,即使将来条件数量增加,即使工作将保持不变,即更新 List。

所以我用一个静态方法创建了一个私有类,它只是验证条件并相应地更新列表。

有没有更好的推荐设计来实现它

4

2 回答 2

1

可以将创建委托给工厂类。如果您有不同的实现类型集,那么就是抽象工厂。于是就有了模式。

我不确定这些 if 块是否只是一个示例,但它们可以被优化,例如将 if(Y.isExists) 移动到上块。

于 2013-04-22T20:29:12.127 回答
0

我写这篇文章是为了回答一些评论。

  1. 我对@Tech-user 的回答投了赞成票,因为在您的情况下,工厂模式是正确的做法。
  2. 实施工厂概念有不同程度的复杂性。“抽象工厂”超出了我的预期。
  3. 详细了解不同类别的模式。这将帮助您将适当的归零。工厂是一种创造模式。您正在创建新对象。State 和 Decorator 本质上不是创造的。
  4. 其他人主张不要使用模式的评论,因为它会使事情复杂化,这忽略了使用模式的意义。模式让代码变得更好,用面向对象的优点构建你的代码。然而,强制你的代码进入一个不合适的模式肯定会使事情复杂化。
  5. 因为“它们增加了复杂性”而放弃模式是非常非常错误的。
于 2013-04-23T13:51:00.423 回答