这种设计模式的名称是什么?

What is the name for this design pattern?

我经常发现自己写的 classes 是这样使用的:

这会给调用代码增加一些开销,例如:

var
  Foo: TFoo;
begin
  Foo := TFoo.Create(...);
  try
    Foo.Run(...);
  finally
    Foo.Free;
  end;
end;

这真的可以写得更短:

begin
  TFoo.Run(...);
end;

在这种情况下,包含 TFoo class 的单元将如下所示:

type
  TFoo = class
  private
    FBar: TBar;
    procedure InternalRun;
  public
    class procedure Run(ABar: TBar); static;
  end;

class procedure TFoo.Run(ABar: TBar);
var
  Foo: TFoo;
begin
  Foo := TFoo.Create;
  try
    Foo.FBar := ABar;
    Foo.InternalRun;
  finally
    Foo.Free;
  end;
end;

开销从调用代码转移到 TFoo class。

这个设计模式的名称是什么?

如果我快速看一下 Portland Pattern Repository, the first part of your question resembles the MethodObject pattern 非常接近。

但由于您正在寻找后一位的名称,它被称为 class method,它不是一种模式,而是一种语言结构。

这与我对 Command Pattern 的(简单)实现非常相似。