Patrones PHP Diseño modelo intermediario

En la parte posterior y dicho, estamos trabajando a menudo fuera de un grupo de personas y tenemos contactos profundos, y que es el agente de bienes raíces. Después de graduarse de la universidad pronto será capaz de comprar una casa en la segunda generación X ciudad favorita no está a nuestro alcance para considerar Kazajstán. Desde la necesidad de que el alquiler a largo plazo, a continuación, debido a los cambios en el trabajo o la vida, la inevitable o dos años o tres a cinco años y jugarán un agente de bienes raíces 2000-2003. A veces, no sabemos necesariamente los propietarios inquilinos de información, los propietarios no saben que nuestra información, todo por la agencia para su procesamiento. En este caso, la agencia se ha convertido en un puente de comunicación, de hecho, esta situación es como un dueño de una casa en el campo han ido al extranjero o cosa y la casa conseguido completar las manos de intermediarios. Al igual que en este caso, el código en el mundo, es una aplicación típica del patrón de mediador.

GOF diagrama de clases y las explicaciones

GoF Definición: Objeto de la mediación que encapsula un conjunto de objetos interactúan. mantenimiento de Mediador objetos se hace referencia explícitamente a la otra, de modo que imprecisa, y puede ser variada independientemente entre los mismos interacción

La figura clase GoF

la implementación del código
abstract class Mediator
{
    abstract public function Send(String $message, Colleague $colleague);
}

class ConcreteMediator extends Mediator
{
    public $colleague1;
    public $colleague2;

    public function Send(String $message, Colleague $colleague)
    {
        if ($colleague == $this->colleague1) {
            $this->colleague2->Notify($message);
        } else {
            $this->colleague1->Notify($message);
        }
    }
}

Abstraído de los intermediarios y la implementación específica, donde suponemos están fijados clase dos colegas, vamos a hablar unos con otros, por lo que el momento de entrar colegas 1, fueron a llamar al método de notificación, el equivalente es permitir la recepción 2 1 a los mensajes enviados por

abstract class Colleague
{
    protected $mediator;
    public function __construct(Mediator $mediator)
    {
        $this->mediator = $mediator;
    }

}

class ConcreteColleague1 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事1得到信息:" . $message, PHP_EOL;
    }
}

class ConcreteColleague2 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事2得到信息:" . $message;
    }
}

Colegas y clase de implementación específica, donde nos aseguramos de que el punto es, cada clase un colega, sólo se conoce a los intermediarios que no conocían otra clase colega, que es característica de un mediador, las dos partes no lo sé.

$m = new ConcreteMediator();

$c1 = new ConcreteColleague1($m);
$c2 = new ConcreteColleague2($m);

$m->colleague1 = $c1;
$m->colleague2 = $c2;

$c1->Send("吃过饭了吗?");
$c2->Send("没有呢,你打算请客?");

Llamar al cliente es relativamente simple!

  • Este modo no se encuentra en muy buena forma para hacer algunos productos de comunicaciones? Sí, social de la charla, SNS, al igual que en vivo son apropiadas, ya que este modelo es permitir el desacoplamiento entre los usuarios, de modo que un usuario no necesita para mantener todos los usuarios objetos asociados
  • Debido a que el usuario no necesita mantenimiento de la relación, por lo que es la manera de resolver el problema de la relación de mantenimiento varios entre, al mismo tiempo, los usuarios no necesitan modificar la clase de relaciones de cambio han mantenido un buen paquete de clases de usuarios
  • Sin embargo, los intermediarios centralizados de mantenimiento puede resultar en esta clase es demasiado complejo y grande
  • Por lo tanto, el modelo no es una panacea, asegúrese de aclarar la opción de utilizar el escenario de negocios
  • Mediador se aplica a un conjunto de objetos con formas bien definidas, pero complejas de ocasión comunicación, y quieren personalizar el comportamiento de un sistema distribuido a través de múltiples clases, pero no quieren generar demasiadas ocasiones subclase

Como empresario, que entiende la importancia de la gestión de proyectos, director del proyecto, es el papel de mediador en muchas ocasiones. Desde un punto de vista organizativo, el principio y el final de un proyecto, ya que no tiene que preocuparse acerca de quién es el jefe se implementa mediante un código específico, sólo estoy tratando de comunicarse con el director del proyecto. Del mismo modo, otros departamentos auxiliares, incluyendo finanzas, personal, administración, etc., que no se preocupan por quién va a escribir el código, pero sólo necesita gestores de cambio y de proyectos para comprender la situación del proyecto y lo que hay que cooperar. El equipo del proyecto, la gente hace escribir código? No es necesario saber quién va a darle los salarios o de asistencia donde el problema es, también, a todos los jefes de proyecto solucionarlo. Por lo tanto, el director del proyecto responsable del desarrollo del proyecto, es una aplicación típica del patrón de mediador. Nuestra razón fábrica de teléfonos móviles por qué el desarrollo es tan rápido, sino también gracias a estos gestores de proyectos, pidiéndoles que comer una comida grande por la noche para ir un poco ~ ~ ~

código completo: https://github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator.php

Ejemplos

Esta vez no enviar mensajes de texto, una sala de chat para lograrlo. Un simple sala de chat en línea, la demanda es permitir que el usuario introduzca la sala de chat puede conversar en línea, vamos a ver cómo utilizar el modelo intermediario para lograr esta habitación ahora!

La figura Chat Clase de habitaciones

El código fuente completo: https://github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator-webchat.php

<?php

abstract class Mediator
{
    abstract public function Send($message, $user);
}

class ChatMediator extends Mediator
{
    public $users = [];
    public function Attach($user)
    {
        if (!in_array($user, $this->users)) {
            $this->users[] = $user;
        }
    }

    public function Detach($user)
    {
        $position = 0;
        foreach ($this->users as $u) {
            if ($u == $user) {
                unset($this->users[$position]);
            }
            $position++;
        }
    }

    public function Send($message, $user)
    {
        foreach ($this->users as $u) {
            if ($u == $user) {
                continue;
            }
            $u->Notify($message);
        }
    }
}

abstract class User
{
    public $mediator;
    public $name;

    public function __construct($mediator, $name)
    {
        $this->mediator = $mediator;
        $this->name = $name;
    }
}

class ChatUser extends User
{
    public function Send($message)
    {
        $this->mediator->Send($message . '(' . $this->name . '发送)', $this);
    }
    public function Notify($message)
    {
        echo $this->name . '收到消息:' . $message, PHP_EOL;
    }
}

$m = new ChatMediator();

$u1 = new ChatUser($m, '用户1');
$u2 = new ChatUser($m, '用户2');
$u3 = new ChatUser($m, '用户3');

$m->Attach($u1);
$m->Attach($u3);
$m->Attach($u2);

$u1->Send('Hello, 大家好呀!'); // 用户2、用户3收到消息

$u2->Send('你好呀!'); // 用户1、用户3收到消息

$m->Detach($u2); // 用户2退出聊天室

$u3->Send('欢迎欢迎!'); // 用户1收到消息
explicación
  • ¿No hubo, el mediador es esta "sala de chat", que se va a pasar por la transferencia de información
  • Porque aquí no es un número fijo de usuarios, es una serie de mantenimiento, cuando un usuario envía un mensaje, además de él mismo, otras personas han recibido este mensaje
  • usuarios de las salas de chat pueden libremente dentro y fuera, para ser honesto, este ejemplo ha sido casi como una realidad da cuenta de la función de la aplicación de chat oh
  • Efectivamente modelo intermediario es realmente adecuado para aplicaciones de comunicaciones, sin embargo, si el usuario introduce mucho, $ lista de usuarios llegará a ser hinchado, oh, este es el problema descrito anteriormente, donde el modelo intermediario
Publicado 41 artículos originales · ganado elogios 6 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/bujidexinq/article/details/104964311
Recomendado
Clasificación