状态设计模式——传递对象
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();
...
要评论您的解决方案,我想我更喜欢单例。
如果您发现每个状态都需要使用一个新对象,您可能会继续添加参数。你的第二个解决方案解决了这个问题,但你可能会将对象传递给不需要使用它们的状态。
但初始化可能是最好的。
我有一个具有 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();
...
要评论您的解决方案,我想我更喜欢单例。 如果您发现每个状态都需要使用一个新对象,您可能会继续添加参数。你的第二个解决方案解决了这个问题,但你可能会将对象传递给不需要使用它们的状态。
但初始化可能是最好的。