每当我创建一个需要一些异步获取的数据来初始化自己的actor时,我发现自己使用了这样的习语。它有名字吗? (这是最好的方法吗?)
receive
对于通过群集分片创建的actor,异步请求发生在preStart
而不是#include<iostream>
#include<iomanip>
#include<cmath>
#include<math.h>
using namespace std;
int main()
{
int n, sk,M[20], i,j,kiek;
cin >> n;
int k = double(pow(2, n));
kiek = 0;
while (k > 0)
{
kiek++;
k = k / 10;
}
k = double(pow(2, n));
if (kiek >= 3)
{
for (i = 3; i >= 1; i--)
{
sk = k % 10;
M[i] = sk;
k = k / 10;
}
for (j = 1; j <= 3; j++)
{
cout << M[j];
}
cout << endl;
}
else if (kiek == 2)
{
for (i = 2; i >= 1; i--)
{
sk = k % 10;
M[i] = sk;
k = k / 10;
}
for (j = 1; j <= 2; j++)
{
cout << M[j];
}
cout << endl;
}
else cout << k << endl;
return 0;
}
。
要明确,我不是在寻找GoF模式。
答案 0 :(得分:1)
我从未使用过藏匿的东西。如果我真的需要初始化,我更有可能使用FSM来确保我的演员处于就绪状态。
http://doc.akka.io/docs/akka/current/scala/fsm.html
我想你可以结合两种方法。
答案 1 :(得分:0)
我认为最接近的设计模式是代理。
根据文档here:
设计代理或代理对象:在客户端第一次发出代理请求时实例化真实对象,记住该真实对象的身份,并将发起请求转发给该真实对象。然后,所有后续请求都直接转发到封装的真实对象。
在你的情况下,你可以想到被代理包裹的actor。一旦从数据库初始化了actor,代理就会将所有请求转发给它,即真正的 actor。在此之前,代理将返回null,默认 actor或其他内容。
答案 2 :(得分:0)
每当我 创建 时, 需要 的某个参与者会异步获取 数据 初始化 本身......
我想说,你基本上描述了一个工厂模式。如果你的演员是DDD概念,那么它将在DDD Repository的上下文中。换句话说,您正在处理实体的复杂创建及其验证 - 需要 部分。 DDD存储库的职责之一是产生 有效 聚合根。
我的两分钱。
谢尔盖
&LT;&GT;&LT;