螃蟹学PHP设计模式之中介者模式

螃蟹学PHP设计模式之中介者模式

10.中介者模式

今天学习新的干货,螃蟹也不多扯了。昨天学的迭代器模式,就是对计数对象集合的遍历,避免直接操作原对象集合。中介者模式搞清楚后也不难,螃蟹还是用比喻更理解透彻一些。假如你要买房,需要从银行贷款,又要到房产公司办理手续,来来回回你跑的很辛苦,现在你直接交给中介,不用跑了。中介者模式就是类似中介做的事,这个和之前的委托模式不一样,委托模式是访问多个对象时的处理,对象之间是彼此独立,而中介者主要是处理对象之间的关系,不需要对象直接访问,通过第三方来访问就可以让彼此更松散,即便后期对象有修改也不会影响彼此的交互,也更易于维护。

参考项目模块:消息模块

说实话,螃蟹之前做过的项目中遇到对象关系特别复杂的还真想不起来了。不过最近做的一个项目的消息模块,倒是可以拿来改造。消息对象分别有系统管理员,普通用户,合作商家,之间都存在交互,正好可以使用中介者模式来重构。

消息抽象类:Message.class.php

<?php //消息抽象类 abstract class Message{ private $_mediator = null; public function __construct($mediator = null){ $this->_mediator = $mediator; } public function send($message){ $this->_mediator->send($message,$this); } abstract function output($message); } ?>

这里面定义了构造方法以及需要具体类实现的抽象方法,接下来定义具体对象

管理员:AdminMessage.class.php

<?php require_once('Message.class.php'); //消息具体类 class AdminMessage extends Message{ public function output($message){ echo 'Admin:'.$message.'<br>'; } } ?>

普通会员:MemberMessage.class.php

<?php require_once('Message.class.php'); //消息具体类 class MemberMessage extends Message{ public function output($message){ echo 'Member:'.$message.'<br>'; } } ?>

合作商家:ShopMessage.class.php

<?php require_once('Message.class.php'); //消息具体类 class ShopMessage extends Message{ public function output($message){ echo 'Shop:'.$message.'<br>'; } } ?>

然后编写中介者抽象类:Mediator.class.php

<?php //抽象中介者 abstract class Mediator{ abstract public function send($message,$user); } ?>

这里面只定义了一个抽象方法,对应Message的抽象类,实现对象交互,具体中介者类为:MessageMediator.class.php

<?php require('Mediator.class.php'); require_once('AdminMessage.class.php'); require_once('ShopMessage.class.php'); require_once('MemberMessage.class.php'); //消息中介者 class MessageMediator extends Mediator{ protected $_user = array(); public function __construct(){ array_push($this->_user,'AdminMessage'); array_push($this->_user,'MemberMessage'); array_push($this->_user,'ShopMessage'); } public function send($message,$user){ foreach ($this->_user as $countainer){ if($user instanceof $countainer){ $user -> output($message); } } } } ?>

这里面定义了中介者的send操作,编写测试文件:TestMediator.php

<?php require('MessageMediator.class.php'); //测试 $mediator = new MessageMediator(); $msg1 = new MemberMessage($mediator); $msg2 = new AdminMessage($mediator); $msg3 = new ShopMessage($mediator); $msg1->send("我看看"); $msg2->send("看看"); $msg3->send("可以"); ?>

输出结果

Member:我看看 Admin:看看 Shop:可以

虽然是敲了一遍代码,大致思路也有,不过感觉这里使用中介者模式还真不如用委托模式或工厂模式方便。螃蟹觉得应该是例子没写全的原因,如果在中介者对象里面直接封装多个对象的交互方法确实可以使复杂的对象关系处理得更为巧妙,这里先学习了。

转载于:https://my.oschina.net/caroltc/blog/299229

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109758.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA设计模式之单例模式

    本文继续介绍23种设计模式系列之单例模式。概念:  java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。  单例模式有以下特点:  1、单例类只能有一个实例。  2、单例类必须自己创建自己的唯一实例。  3、单例类必须给所有其他对象提供这一实例。  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例…

    2022年3月11日
    39
  • 设计模式 | 适配器模式及典型应用

    设计模式 | 适配器模式及典型应用适配器模式适配器模式(AdapterPattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适…

    2022年7月25日
    11
  • 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型)设计模式(五)适配器模式Adapter(结构型)1.概述:接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器。………

    2022年7月25日
    9
  • 设计模式之六大设计原则[通俗易懂]

    设计模式之六大设计原则

    2022年1月20日
    46
  • JavaScript中几种常用的设计模式

    JavaScript中几种常用的设计模式设计模式:代码书写经验,为了应对各种场景,经过前人不断的总结,压缩,形成的一套又一套的代码的书写规范,形成了设计模式。1.单例模式单例模式是一种常用的设计模式,如果需要多次创建同一个对象,完成

    2022年7月4日
    24
  • 设计模式(4)-对象创建型模式-Prototype模式

    设计模式(4)-对象创建型模式-Prototype模式

    2022年1月22日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号