大家都在说设计模式,俺们也来插一脚解说一下。
先来中介者模式吧,大家都把设计模式将复杂了。GOF第一中介者模式为:用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者模式使原有一对多的依赖变成了一对一的依赖,同事类只依赖中介者,降低了类之间的耦合。
其实说白了就是将下面的联系方式A变成了B方式而已,不仅降低类与类之间的耦合,也减少了我们维护的成本。
图1:联系方式A
图2:联系方式B
在A方式下各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改B的一个函数,你就需修改A,C,E三个类的代码,至少修改4个类,在B方式下,可以使各个对象间的耦合松散,只需关心和 Mediator (矩形)的关系,修改一个类既可以。
例子比较通俗,果农与化肥老板,中介是商场。果农如果需要化肥,直接和商场要化肥;化肥老板若需水果,同样直接和商场打交道。照惯例上和UML和代码:
1.定义抽象中介者类,就是商场的抽象,就一个sell方法
interface Mediator{
function sell($name,$number);
}
2.定义抽象同事类,咱们的抽象同事类就是一个人。。。。。。,他buy买东西,他getThings卖东西。
abstract class Human{
protected $mediator=null;
abstract public function getThings($number);
abstract public function buy($name,$number);
public function setMediator($mediator)
{
$this->mediator = $mediator;
}
public function getMediator()
{
return $this->mediator;
}
//set/get自己去加!!
}
3.具体中介者
class ConcreteMediator implements Mediator{
private $orchardist=null;//果农
private $boss=null;//化肥老板
public function sell($name,$number){
if($name == 'fruit'){
$fruit=$this->orchardist->getThings($number);
echo '商场从果农给你'.$fruit.'!'."\n";
return $fruit;
}
if($name == 'fertilizer'){
$fertilizer=$this->boss->getThings($number);
echo '商场从化肥老板那里给你'.$fertilizer.'!'."\n";
return $fertilizer;
}
}
//set/get自己去加!!
}
4.具体2个同事,果农和化肥老板
class Orchardist extends Human{
public function __construct($mediator){
$this->mediator=$mediator;
}
public function getThings($number){
return $number.'水果';
}
public function buy($name,$number){
$result=$this->mediator->sell($name,$number);
echo '我们果农得到了'.$result."\n";
}
}
class Boss extends Human{
public function __construct($mediator){
$this->mediator=$mediator;
}
public function getThings($number){
return $number.'化肥';
}
public function buy($name,$number){
$result=$this->mediator->sell($name,$number);
echo '我们化肥老板得到了'.$result."\n";
}
}
最后测试:
$mediator=new ConcreteMediator();
$orchardist=new Orchardist($mediator);
$boss=new Boss($mediator);
$mediator->setOrchardist($orchardist);
$mediator->setBoss($boss);
$orchardist->buy('fertilizer',200);//果农买200袋化肥
$boss->buy('fruit',50);//化肥老板买50个水果
结果:
- 大小: 17 KB
- 大小: 16.5 KB
- 大小: 14.9 KB
- 大小: 4.5 KB
分享到:
相关推荐
- 中介者模式:用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态...
- 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复...
常见的行为型模式包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)...
中介者模式是一种行为设计模式,它允许将对象间的直接交互简化为通过一个中介对象来实现。这种模式的目的是减少类之间不必要的直接通信,从而降低系统的耦合度。 在PHP中实现中介者模式,主要涉及以下几个关键组件...
中介者模式(Mediator Pattern)是软件设计模式中的一种,属于对象行为型模式。它的主要目的是减少对象之间的直接交互,降低耦合性,使得对象之间的关系更加松散,提高系统的可扩展性和可维护性。在PHP中,中介者...
在PHP中,通过中介者模式,我们可以构建更加灵活、易于理解和维护的系统,同时避免了过多的直接依赖导致的问题。在实际开发中,可以根据需求选择适当地使用中介者模式,优化代码结构,提高软件质量。
- **中介者模式(Mediator)**:用一个中介对象来封装一系列的对象交互。 - **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 - **观察者模式...
"PHP 设计模式-design-patterns.zip"这个压缩包很可能包含了对多种设计模式在PHP中的实现示例。设计模式通常分为创建型、结构型和行为型三大类,下面我们将详细探讨这些类别中的主要设计模式。 **创建型设计模式:*...
16. **中介者模式(Mediator)**:定义一个中介对象来简化多个对象之间的交互。 17. **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象...
17. **中介者模式**:定义一个中介对象来简化原本复杂的对象交互关系。 18. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的状态,并在需要时恢复它。 19. **观察者模式**:定义对象之间的一对多依赖关系...
- 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 - 观察者模式(Observer):定义对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 -...
9. **中介者设计模式**:用一个中介对象来封装一系列的对象交互,降低对象之间的耦合度。 10. **职责链设计模式**:将请求沿着接收者链进行传递,直到某个对象决定处理它。 11. **命令设计模式**:将请求封装为一...
- 与中介者模式(Mediator)相似,中介者模式也封装了对象间的关系,但它通过一个中介者来封装复杂的更新逻辑,而不是直接与多个观察者通信。 - 与单例模式(Singleton)相关联,单例模式可以确保ChangeManager...
- 中介者模式:用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 - 观察者...
- **微服务通信**:在微服务架构中,Kafka可以作为服务间异步通信的中介,提高系统的解耦度和可扩展性。 总之,"kafka-php-master"是一个强大的工具,让PHP开发者能够充分利用Kafka的强大功能,实现高效、可靠的...