状态设计模式-传递对象

State design pattern - Passing Objects

本文关键字:对象 设计模式 状态      更新时间:2023-10-16

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

State1::DoTask(){...}
State2::DoTask(){...}
State3::DoTask(){...}

这三个状态都需要使用两个已经实例化的类

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

如何传递这2类指针对象到State1, State2和State3的最佳方式?

我想有两个选择:

1)传感器和服务器类可以是一个单例:

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

2)通过使用其他对象保存类指针传递:

class ComClasses
{
    Sensor *sensor;
    Server *server;
}
State1::DoTask(ComClasses *c)
{
    ....
}

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

问好,

您也可以在初始化状态时这样做。

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

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

state1.DoTask();
...

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

但可能初始化是最好的