我有一个状态设计模式实现,有3种状态:
State1::DoTask(){...}
State2::DoTask(){...}
State3::DoTask(){...}
这三个州都需要使用已经实例化的2个类
e.g。
State1::DoTask()
{
sensor->GetData(...)
server->Send(buf,size)
}
将这两个类指针对象传递给State1,State2和State3的最佳方法是什么?
我想到了两个选择:
1)传感器和服务器类可以是单例:
State1::DoTask()
{
sensor = Sensor::GetInstance();
server = Server::GetInstance();
....
}
2)使用其他对象传递来保存类指针:
class ComClasses
{
Sensor *sensor;
Server *server;
}
State1::DoTask(ComClasses *c)
{
....
}
在您看来,最好的方法是怎样的?有更好的解决方案吗?
致以最诚挚的问候,
答案 0 :(得分:1)
初始化状态时也可以这样做。
State1 state1( sensor, server );
State2 state2( sensor, server );
State3 state3( sensor, server );
然后DoTask接口方法(您的客户端方法)不应该关心每个单独State类的实现。每个州都将使用自己的信息来实施它。
state1.DoTask();
...
为了评论你的解决方案,我想我更喜欢单身人士。 如果您发现每个州都需要使用的新对象,您可能会继续添加参数。你的第二个解决方案解决了这个问题,但是你可能会将对象传递给不需要使用它们的状态。
但可能初始化最好。