这种设计模式的名称是什么?
What is the name for this design pattern?
我经常发现自己写的 classes 是这样使用的:
- 创建 class
的对象
- 对该对象调用一些 "Run" 或 "Execute" 方法
- 销毁对象
这会给调用代码增加一些开销,例如:
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 的(简单)实现非常相似。
我经常发现自己写的 classes 是这样使用的:
- 创建 class 的对象
- 对该对象调用一些 "Run" 或 "Execute" 方法
- 销毁对象
这会给调用代码增加一些开销,例如:
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 的(简单)实现非常相似。