这是一种模式吗?

时间:2012-05-09 09:44:49

标签: design-patterns

一个天真且难以测试的方法实现可能如下所示

public void getFromDatabaseComputeAndStore(SomeType param) {
     Collection<Something> s = dao.retrieveSomethingFromDatabase(param);
     Collection<Other> o = dao.retrieveOtherFromDatabase(param);
     Result r = null;
     <do massive computation, call other methods, figure out what r should be>
     <based on s and o>
     dao.store(r);
}

通常我会将其重构为类似

的内容
public void getFromDatabaseComputeAndStore(SomeType param) {
     Computer computer = new Computer();
     Collection<Something> s = dao.retrieveFromDatabase(param);
     Collection<Other> o = dao.retrieveOtherFromDatabase(param);
     computer.setSomething(s);
     computer.setOther(o);
     computer.execute();
     Result r = computer.getResult();
     dao.store(r);
}

Computer类是关键。此类不与数据库或其他外部系统交互,也没有副作用,例如它纯粹是功能性的。给定相同的somethingsothersresult将始终相同。

所以我的问题是:

  • 这是一个名为
  • 的已知模式
  • 具有Computer
  • 功能的类的通用名称是什么

我查看了StrategyMediatorCommand模式,但我觉得它们并不完美。

1 个答案:

答案 0 :(得分:0)

您的计算机是构建器的一种形式。

Builder的一个用途是允许对对象的复杂构造进行封装,使得构建器的客户端永远不能访问部分构造的或无效的对象。您配置Builder,然后从中获取已完成的对象。

请注意,GoF有一个包含多态结果的构建器示例。这种用法也很常见,但我不认为这是严格要求的。

.NET和Java在其框架中有两个用法的充分示例。