Design patterns 如果我有n个条件需要处理,建议的设计/模式

Design patterns 如果我有n个条件需要处理,建议的设计/模式,design-patterns,ooad,Design Patterns,Ooad,我有一些条件,比如- 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

我有一些条件,比如-

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)
....
首先我想到使用状态模式,但是我意识到对于每个条件我都需要声明类,并且我想限制类的数量

第二,我考虑使用装饰器模式,但同样需要进行上述条件检查,如果需要,则上述循环是否会产生任何问题

我的条件只是需要添加新的类到列表中,没有其他,即使在未来,如果条件数量增加,甚至工作将保持不变,即更新列表

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


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

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


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

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


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

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

  • 我对@Tech user的答案投了赞成票,因为在你的情况下,工厂模式是正确的
  • 工厂概念的实施存在不同程度的复杂性。“抽象工厂”超出了我的预期
  • 。这将有助于你找到合适的方法。工厂是一种创造性的模式。您正在创建新对象。国家和装饰者在本质上不是创造性的
  • 其他人的评论主张不要使用模式,因为它会使事情复杂化,但却忽略了使用模式的意义。模式使代码变得更好,用面向对象的优点构建代码。然而,强迫你的代码进入一个不合适的模式肯定会使事情复杂化
  • 因为“它们增加了复杂性”而立即抛弃模式真的、真的是被误导了

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

  • 我对@Tech user的答案投了赞成票,因为在你的情况下,工厂模式是正确的
  • 工厂概念的实施存在不同程度的复杂性。“抽象工厂”超出了我的预期
  • 。这将有助于你找到合适的方法。工厂是一种创造性的模式。您正在创建新对象。国家和装饰者在本质上不是创造性的
  • 其他人的评论主张不要使用模式,因为它会使事情复杂化,但却忽略了使用模式的意义。模式使代码变得更好,用面向对象的优点构建代码。然而,强迫你的代码进入一个不合适的模式肯定会使事情复杂化
  • 因为“它们增加了复杂性”而立即抛弃模式真的、真的是被误导了

  • 你在说什么?对不起。。我指的是条件,更新了主要文本,你所做的看起来更干净,而不是不必要地使用设计模式使事情复杂化。我想你应该听听AmandeJiddewar的回答。不是每个地方都可以使用DP。是的,这是违反OCP的,但是,就个人而言,我看不到其他解决方案-因为你依赖于对象的数量(X,Y,Z,N)问题是
    你的X,Y,Z IsExists的本质是什么
    ,语义-它与对象有关系吗?它是如何像查询表达式之类的。像这样,它可以是任何东西(你的Q有点毫无意义——因为它代表了一半的用例)-你可以使用factory,但只是将所有的if-s移到那里不会有多大帮助。始终要考虑事情的本质,设计模式会在以后出现。你在说什么循环?对不起……我是说条件,更新了正文。你所做的看起来比不必要地使用设计模式使事情复杂化更干净.我想你应该听Amandeep Jiddewar的回答。不是每个地方都可以使用DP。是的,这违反了OCP,但就个人而言,我看不到其他解决方案-因为你依赖于对象的数量(X,Y,Z,N)问题是
    X,Y,Z IsExists的本质是什么
    ,语义-它与对象相关吗?如何-它像查询表达式等。像这样,它可以是任何东西(而你的Q有点毫无意义-因为它代表了一半的用例)-您可以使用factory,但只是将所有if-s移入其中不会有多大帮助。请始终考虑事物的本质,设计模式会在稍后出现。