Delphi 除了Collegue的调解模式,还有其他选择吗;闲置;?

Delphi 除了Collegue的调解模式,还有其他选择吗;闲置;?,delphi,design-patterns,mediator,Delphi,Design Patterns,Mediator,我有一个项目,在这个项目中,它的活动和功能大部分时间都遵循一个连续的过程。但有时您需要“返回”步骤并重新运行前面的函数 我做了一个状态图,看看它有多复杂 我认为第一种方法是应用状态模式,但状态的数量似乎不可行。然后“我分离”并将it功能划分为6个流程。每个过程都是我想象的那样: TProcessXXX = class(TProcess) private {* atributos privados, etc.. *} public {* funciones y actividades *} pro

我有一个项目,在这个项目中,它的活动和功能大部分时间都遵循一个连续的过程。但有时您需要“返回”步骤并重新运行前面的函数

我做了一个状态图,看看它有多复杂

我认为第一种方法是应用状态模式,但状态的数量似乎不可行。然后“我分离”并将it功能划分为6个流程。每个过程都是我想象的那样:

TProcessXXX = class(TProcess)
private
{* atributos privados, etc.. *}
public
{* funciones y actividades *}
procedure DoActivity1;
procedure DoActivity2;
{* ... *}
function DoActivityN: TResultProcess;
end;
每个流程的大多数活动都在封装所需数据结构的同一个类上运行。我的意图是,每个进程都可以通知另一个进程的结束,然后通知下一个作业

我看到的设计是中介模式,有一个类封装状态图并“启用”每个进程。 为了在它们之间进行协调,我考虑添加与协调器/中介类通信的方法。包括:

function TProcess.RequestPermission: boolean;

procedure TProcess.NotifyFinishOperation(Result: TResultOperation);
在这个过程中,我独立地设计了它们

至于没有为每个活动请求许可,以及一些需要一些冗余排序和一次又一次请求的活动,我应用了一个“锁”,允许启用它们

TProcessXXX.PrepareToWork;
var req: boolean;
begin
    req: = RequestPermission;
    then begin if req
EnableActivitys
Work;
end;
end;
到目前为止还不错。我的怀疑始于从表示层调用操作流程。 为了获得调用的权限,我有一个从层表示到中介的间接寻址:表示->TProcessXXX->中介 然后我们获得了每个活动的另一个权限:演示->TProcessXXX->TDataStructure

当进程收到权限时,使用TDataStructure为自己捕获。它将接管,直到操作完成。同时,其他进程处于“空闲”状态。而从表示层可能会给您不必要的操作请求

我考虑过禁用控件,这是最直接、最简单的方法。但随后必须始终启用和禁用

我问:你有什么建议?是否有一种模式可以处理“空闲进程”这一主题


编辑:

我已经研究过策略和访客等备选方案,但我不确定它们是否是最佳选择。我承认这三种模式(调停者、策略、访问者)可能并不是100%的主导模式。 我忘了澄清这一点。我道歉

我还想补充一点,如果我值得投反对票,至少可以发表评论解释原因


编辑2:

根据建议,我在状态图的图片上附加了一个链接:

在图中,您可以看到有一个选项。设计为在启动时评估最后达到的状态,并从该点继续

在这个图中,我在五个过程中有单独的活动:配置、管理集、培训、测试和识别

我又添加了一个,第六个名为initializer,它具有使用从数据库访问的数据初始化数据结构的功能


每个过程都是调解人的集合。调解人执行此状态图,并决定处理他的“权限”以进行操作。

您的问题不是最好的形式,因此我不完全确定您想要实现什么。但我想你需要实现一些更复杂的代码流控制,它是基于某些条件的

如果我的假设是正确的,你应该检查决策树模式

在决策树模式中,您将工作划分为多个较小的步骤(这是您已经尝试实现的)

在每个步骤结束时,您检查特定条件,然后根据该条件决定如何继续(继续执行下一步,重复当前步骤,甚至跳到完全不同的步骤)

从您的SO简介信息中,我看到您是计算机工程专业的学生,因此我可以告诉您,决策树的使用通常在AI开发课程中进行深入讨论,因为大多数复杂的AI算法实际上依赖于使用决策树模式,因为它具有很强的可扩展性


因此,您可能想查看您的教科书中描述AI开发的部分。

我并不是对您的问题投了反对票的人,但我相信投反对票的原因是Stack Owerflow是为了解决特定的编码问题,而您正在询问如何使用适当的设计模式。我相信在上问你的问题会更合适。我见过其他像这样的问题,一些老问题,并且没有收到任何反对意见和回复。另一个否定的是更多的选票,如果有人提出善意。当我看到没有巨魔在这么走路玩负面投票。必须控制谁有权力。你的任何活动是否同时执行(多线程)?没有。但另一个论坛的朋友建议这样做。我正在考虑。通过图表中的圆圈,看看是否需要在我的问题描述中添加一些内容,我可以要求。我在数据结构大教堂和IA使用的专家系统中研究了树的主题。就算是我不熟悉的一种模式。我要澄清的是,在我所学的课程中,没有人教过我,我是自己学习的。帮助我更好地理解您想要实现的东西是提供您提到的状态图,以查看代码的复杂性。