小编Vla*_*ape的帖子

使用Symfony2实现Factory模式的最佳实践

我正在制作一个可以发送电子邮件或短信的信使,并且可以立即发送或稍后发送(信息保存在数据库中).我已经做了两个解决方案,但两个都不令我满意.

我正在将代码集中在一个Factory中,而Factory模式的代码非常简单:

class MessageFactory
{
     static public function get($type,$em)
     {
          $instance = null;
          switch ($type) {
              case 'email':
                    $instance = new EmailMessage($em);
                    break;
   ....
  return $instance;
}

class EmailMessage implements MessangerInterface
{
 ...
   public function send( $eMessage,array $receivers, $time=NULL)
   {

interface MessangerInterface
{
  public function send($message,array $receivers);
}
Run Code Online (Sandbox Code Playgroud)

第一个解决方案:只需调用普通的静态方法

$messanger = Factory\MessageFactory::get('email',$em);
$messanger->send($eMessage, array('tom'=>'tom@gmail.com'));
Run Code Online (Sandbox Code Playgroud)

这是一个糟糕的解决方案,因为我需要将Doctrine Manager作为参数传递给方法

第二种解决方案:将其用作Symfony 2服务

services:
my.messanger:
    class: Bundle\Factory\MessangerInterface
    factory_class: Bundle\Factory\MessageFactory
    factory_method: get
    arguments:
        messanger_type: %messanger.type%
Run Code Online (Sandbox Code Playgroud)

并且还将学说作为论据传递.但是使用这样的解决方案我不能在我的代码中选择messanger.type,它使用配置参数定义为emailsms; 我需要在代码中具有选择类型的能力.

另外我有一个问题,我需要在课堂上发送电子邮件或短信,这意味着我需要一个外部服务,得到这样的:

class EmailMessage …
Run Code Online (Sandbox Code Playgroud)

factory-pattern symfony

7
推荐指数
1
解决办法
1万
查看次数

Python Numpy:循环中的随机数

我有这样的代码并使用 Jupyter-Notebook

for j in range(timesteps):    
    a_int = np.random.randint(largest_number/2) # int version
Run Code Online (Sandbox Code Playgroud)

我得到随机数,但是当我尝试将部分代码移动到函数时,我开始在每次迭代中收到相同的数字

def create_train_data():        
    np.random.seed(seed=int(time.time()))     
    a_int = np.random.randint(largest_number/2) # int version
    return a

for j in range(timesteps):    
    c = create_train_data()  
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何解决?我想可能是因为 Jupyter-Notebook 中的进程

python random numpy

3
推荐指数
1
解决办法
3350
查看次数

标签 统计

factory-pattern ×1

numpy ×1

python ×1

random ×1

symfony ×1