具有“动态”方法数量的Java类?

时间:2017-05-12 22:53:32

标签: java design-patterns

让我们假设我们有一个课程,偶尔会添加新的检查,并以下面的描述结束:

class CheckList{
  check1(){
   //do something
  }
  check1(){
   //do something
  }
  //...
  checkN(){
   //do something
  }
}

并且您希望以简单的方式调用所有检查

我考虑过以下几种选择:

  1. 使用反射来获取方法,迭代并执行它们
  2. 使用包含检查名称的列表,迭代并执行它们
  3. 使用注释加载,填充地图并转到2
  4. 使用接口,创建实现它的类,并通过循环实例化检查并执行它们
  5. 我想要避免的是每次需要修改其他类 添加了新的支票。

    是否有一种设计模式/配方可以实现这样的效果?

    注意: 订单根本不重要

    编辑:谢谢你所有有价值的答案,我在创建多个文件时没有问题,我知道我可以创建一个调用其余方法的列表/方法

    class Caller{
     executeAll(){
      check1();
      check2();
      checkN();
     }
     //list add checkN
     //foreach check in list execute it
    }
    

    但我们的想法是让它尽可能自动化,以便在添加新支票时,所做的更改很少,而且添加新支票的人不必担心将他/她的新支票添加到检查列表(这会使其不易出错)

    如果没有办法避免这样,我想我可以忍受它我只是在寻找一些替代方案

2 个答案:

答案 0 :(得分:2)

我不知道您的确切业务需求,但似乎您需要类似“拦截过滤器模式”的内容 enter image description here

根据上面的图片,您已经拥有的类(CheckList)将被拆分为FilterManager和FilterChain(只是FilterChain也可能就足够了。在您的情况下 - 例如CheckChain)。

check1(),checkN)等方法会被提取到一个接口(在图片上过滤,大概检查你的情况)

您可以将具体的checkN()方法实现为实现此接口的类或lambdas。如果是后者,您可能需要检查(here is a list)是否存在满足您需求的现有功能接口(可能存在)

至少这样的事情。希望有所帮助:)

Intercepting Filter Pattern explained and picture source at the same time

答案 1 :(得分:0)

如何将其作为单元测试编写?每个检查只是同一测试类中的另一个单元测试,并且通过运行整个测试类作为单元测试,除了添加新的检查(测试)之外,您不必执行任何操作