状态设计模式 - 传递对象

时间:2015-06-08 12:12:35

标签: c++ design-patterns

我有一个状态设计模式实现,有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)
{
    ....
}

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

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

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

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

然后DoTask接口方法(您的客户端方法)不应该关心每个单独State类的实现。每个州都将使用自己的信息来实施它。

state1.DoTask();
...

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

但可能初始化最好。

相关问题