状态设计模式——传递对象

State design pattern - Passing Objects

我有一个具有 3 个状态的状态设计模式实现:

State1::DoTask(){...}

State2::DoTask(){...}

State3::DoTask(){...}

这 3 个状态都需要使用 2 个 classes 已经实例化

例如

State1::DoTask()
{ 
    sensor->GetData(...)
    server->Send(buf,size)
}

将这 2 个 class 指针对象传递给 State1、State2 和 State3 的最佳方法是什么?

我考虑了两个选项:

1) 传感器和服务器 class 可能是单例:

State1::DoTask()
{
    sensor = Sensor::GetInstance();
    server = Server::GetInstance();
    ....
}

2)通过使用其他对象持有class指针传递:

class ComClasses
{
    Sensor *sensor;
    Server *server;
}

State1::DoTask(ComClasses *c)
{
    ....
}

在您看来,最好的方法是什么?有更好的解决方案吗?

此致,

您也可以在初始化状态时执行此操作。

State1 state1( sensor, server );
State2 state2( sensor, server );
State3 state3( sensor, server );

然后DoTask接口方法,也就是你的客户端方法,不应该关心每个单独State的实现class。每个州将使用自己的信息实施它。

state1.DoTask();
...

要评论您的解决方案,我想我更喜欢单例。 如果您发现每个状态都需要使用一个新对象,您可能会继续添加参数。你的第二个解决方案解决了这个问题,但你可能会将对象传递给不需要使用它们的状态。

但初始化可能是最好的。