Skip to content

Commit

Permalink
complete chapter25
Browse files Browse the repository at this point in the history
  • Loading branch information
hulin32 committed Dec 6, 2016
1 parent a8e6c62 commit 0815162
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 9 deletions.
79 changes: 79 additions & 0 deletions chapter25.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,86 @@
### 第二十五章 世界需要和平 --- 中介者模式

```php
<?php

abstract class Mediator
{
abstract public function send($message, Colleague $colleague);
}

abstract class Colleague
{
protected $mediator;

function __construct(Mediator $mediator)
{
$this->mediator = $mediator;
}
}

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

public function setColleague1(Colleague $colleague)
{
$this->colleague1 = $colleague;
}

public function setColleague2(Colleague $colleague)
{
$this->colleague2 = $colleague;
}

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

class ConcreteColleague1 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}

public function notify($message)
{
echo "ConcreteColleague1 ".$message."\n";
}
}

class ConcreteColleague2 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}

public function notify($message)
{
echo "ConcreteColleague2 ".$message."\n";;
}
}

//client

$mediator = new ConcreteMediator();
$c1 = new ConcreteColleague1($mediator);
$c2 = new ConcreteColleague2($mediator);

$mediator->setColleague1($c1);
$mediator->setColleague2($c2);

$c1->send('do you eat?');
$c2->send('no, do you want to invite me to dinner?');
```

总结
Expand Down
18 changes: 9 additions & 9 deletions codes/Mediator.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

abstract class Mediator
{
abstract public send($message, Colleague $colleague);
abstract public function send($message, Colleague $colleague);
}

abstract class Colleague
Expand All @@ -22,21 +22,21 @@ class ConcreteMediator extends Mediator

public function setColleague1(Colleague $colleague)
{
$this->colleague1 = $colleague1;
$this->colleague1 = $colleague;
}

public function setColleague2(Colleague $colleague)
{
$this->colleague2 = $colleague2;
$this->colleague2 = $colleague;
}

public function send($message, Colleague $colleague)
{
if($this->colleague1 == $colleague)
{
$this->colleague2->notify();
$this->colleague2->notify($message);
} else {
$this->colleague1->notify();
$this->colleague1->notify($message);
}
}
}
Expand All @@ -45,25 +45,25 @@ class ConcreteColleague1 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, this);
$this->mediator->send($message, $this);
}

public function notify($message)
{
echo "ConcreteColleague1\n";;
echo "ConcreteColleague1 ".$message."\n";
}
}

class ConcreteColleague2 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, this);
$this->mediator->send($message, $this);
}

public function notify($message)
{
echo "ConcreteColleague2\n";;
echo "ConcreteColleague2 ".$message."\n";;
}
}

Expand Down

0 comments on commit 0815162

Please sign in to comment.