“decorator”类的名字很好吗?

时间:2010-03-13 18:14:50

标签: java design-patterns

我想将我正在研究的API分为两部分:'bare-bones'和'easey'。我们的想法是,“轻松”部分中的所有方法调用都可以用“裸骨”部分中的方法来表达,也就是说,它们只能作为快速和肮脏的方便方法。我想这样做的原因是,当人们第一次开始使用API​​时,他们对细节和性能不感兴趣:他们只是想让它工作。

之前有人试过类似的东西吗?我对命名约定和组织代码特别感兴趣。

5 个答案:

答案 0 :(得分:3)

提供'轻松'与'裸骨'的离散分离的一种方法是使用由同一类实现的单独接口。在编写API时,我希望尽可能简单。如果您需要大量参数,请考虑使用fluent interface

答案 1 :(得分:2)

是的,之前我做过类似的事情,而且我倾向于预先添加一个表明额外功能正在做什么的词。

例如,基本Vector类可能只执行非常基本的向量运算(add,dot product),而Vectors类可能有各种静态助手方法(交叉产品,投影,等等)。然后,FluentVector包含所有这些辅助操作,同时改变底层Vector

然而,这不是装饰器模式 - 装饰器使用相同的界面产生不同的“装饰”结果。这是外观模式 - 具有相同基础功能的不同界面。

另外,请记住,扩展API可能有多种不同的方式来提供相同的功能。回到我的Vector示例,可能不希望使用每个链接操作改变基础Vector,而是引入新的Vector - 这可能是ImmutableFluentVector或某些这样。除了副作用的规范之外,API将是相同的。请记住一些事情。

答案 2 :(得分:1)

由于您要求使用好的名称,常用的是简单或基本API和扩展API 。正如Simon Nickerson所提到的,简单的API在技术上通过提供抽象来使用扩展API。另请参阅Facade Pattern

答案 3 :(得分:1)

假设Barebone提供基本功能,Cushy提供其他功能:

 
public class Skeleton
{
  public virtual void Info()
  {
  }
}

public class Adorner:Skeleton
{
  private Skeleton _skeleton;

  public Adorner(Skeleton skeleton)
  {
     _skeleton = skeleton;
  }

  public override void Info()
  {
   //apply adorning work
  }
}

Skeleton bareBones = new Skeleton(); Adorner cushy = new Adorner(bareBones);

答案 4 :(得分:0)

有人在工作时建议FooFooHelper。我喜欢它。