Delegate + Partial Override的设计模式名称

时间:2016-01-22 08:39:26

标签: java design-patterns

我发现自己愚蠢地试图命名一个具有以下特征的课程:

假设Business接口定义了两个复杂的操作:

interface Service {
  void doSomething();
  void doSomethingElse();
}

第三方提供了部分正确的实施:

final class DefaultService implements Service {
    void doSomething() { 
        // OK
    }

    void doSomethingElse() {
        // KO
    }
}

由于扩展不是一个选项,我创建了一个代表DefaultService正确的doSomething()方法的类,并且有自己的doSomethingElse()实现:

final class IDontKnowTheName implements Service {

    private DefaultService delegate;

    void doSomething() { 
        delegate.doSomething();
    }

    void doSomethingElse() {
        // Roll new implementation here
    }
}

是否有“覆盖/委托”类的名称?

  • 不是Adapter,因为原始班级DefaultService已经实施了Service界面
  • 因为方法被覆盖而不是Delegate
  • 不是真正的Decorator,因为目标类的某些功能被替换,而不是增强

2 个答案:

答案 0 :(得分:1)

您可以使用DefaultServiceWrapper这样的名称,这对于委派方法调用没有太大的影响。

但是,我会选择一个名称,专注于该实现本身的功能,而不是它如何委托给现有组件。

RollingNewImplementationService(开玩笑)将是我更喜欢的事情,因为它会说明它的作用并保持代表团自身的作用,作为实现细节。

这样,一旦您确定需要替换doSomething()方法的原始实现或者您找到扩展方法的方法,您就不必更改类的名称DefaultService

答案 1 :(得分:1)

设计模式的关键在于它们是常见问题的可重用解决方案。人们在类名中使用设计模式名称的原因是,用一个词可以传达很多关于这个类试图解决的问题。

现在,你的班级试图解决什么问题?它提供了Service接口的正确实现。这就是您的实现与DefaultService的不同之处。我认为你的类名应该强调,而不是用来实现这一目标的技术。

所以我称之为CorrectService