【PHP设计模式 11_QiaoJie.php】桥接模式(针对 二维模型)
<?php /** * 【桥接模式(针对 二维模型)】 * 对于多维度需要处理的事情,多耦合 * 第一维度,发送信息的类型:站内信、email、手机短信 * 第二维度,发送信息的紧急程度:普通、加急、特级 * (说明)桥接模式只需要 A+B种类,但是常规的需要 A*B种类; * 维度越多,各维度下的分类越多,桥接模式越有优势! * */ header("Content-type: text/html; charset=utf-8"); /** * 抽象的信息类 */ abstract class Msg{ protected $send = null; //发送器 public function __construct($send){ $this->send = $send; } abstract public function msg($content); //信的紧急程度 public function send($to,$content){ //对 $content 进行加工 $content = $this->msg($content); //执行发送 $this->send->send($to,$content); } } /** * 按照 信息类型 划分三个类 */ class Web{ //站内信 public function send($to,$content){ echo "[站内信]发给 $to [内容] $content"; } } class Email{ //Email信 public function send($to,$content){ echo "[Email]发给 $to [内容] $content"; } } class Sms{ //手机短信 public function send($to,$content){ echo "[手机短信]发给 $to [内容] $content"; } } /** * 按照 紧急程度 划分三个类 */ class PtMsg extends Msg{ //普通 public function msg($content){ return $content.'【信件类型是 普通信】'; } } class JjMsg extends Msg{ //加急 public function msg($content){ return $content.'【信件类型是 加急信】'; } } class TjMsg extends Msg{ //特急 public function msg($content){ return $content.'【信件类型是 特急信】'; } } /*---------- 客户端开始任意随机配对调用 ---------*/ //发送【普通】的【站内信】 $pt_web_msg = new PtMsg(new Web()); $pt_web_msg->send('小明','吃饭了'); echo '<hr>'; //发送【特急】的【站内信】 $tj_web_msg = new TjMsg(new Web()); $tj_web_msg->send('张三','去跑步了'); echo '<hr>'; //发送【加急】的【Email】 $jj_email_msg = new JjMsg(new Email()); $jj_email_msg->send('李四','在看书'); echo '<hr>'; //发送【普通】的【手机短信】 $pt_sms_msg = new PtMsg(new Sms()); $pt_sms_msg->send('武松','打老虎'); echo '<hr>'; /************** [ 如下为传统方式,比较麻烦 ] **************/ /** * 需求:给用户发信息 * 第一维度,发送信息的类型:站内信、email、手机短信 * 第二维度,发送信息的紧急程度:普通、加急、特级 * 按照常规思路如下:需要 3*3=9 个类!! */ interface MsgTmp{ public function send($to,$content); } //站内 普通信 class WebPT implements MsgTmp{ public function send($to,$content){ echo "[站内信]发给 $to [内容] $content "; } } //Email 普通信 class EmailPT implements MsgTmp{ //... public function send($to,$content){} } //手机短信 普通信 class SmsPT implements MsgTmp{ //... public function send($to,$content){} } //站内 加急信 class WebJJ implements MsgTmp{} //Email 加急信 class EmailJJ implements MsgTmp{} //手机短信 加急信 class SmsJJ implements MsgTmp{} //站内 特急信 class WebTJ implements MsgTmp{} //Email 特急信 class EmailTJ implements MsgTmp{} //手机短信 特急信 class SmsTJ implements MsgTmp{}
【PHP设计模式 11_QiaoJie.php】桥接模式(针对 二维模型)的更多相关文章
- Java设计模式之《桥接模式》及应用场景
摘要: 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6497919.html 这里摘抄一份他处的概念,你可以不必理会,先看下面得讲解与实例, ...
- java23种设计模式——七、桥接模式
原文地址:https://www.cnblogs.com/chenssy/p/3317866.html 源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 j ...
- 实例解析Python设计模式编程之桥接模式的运用
实例解析Python设计模式编程之桥接模式的运用 这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #e ...
- 【读书笔记】读《JavaScript设计模式》之桥接模式
桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化. 一.使用场景 使用场景一:事件监控 对于前端而言,最典型的使用场景——事件监控.如—— addEvent(element ...
- Java设计模式系列之桥接模式
桥接模式(Bridge)的定义 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地 ...
- java设计模式-----14、桥接模式
Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction ...
- 设计模式学习心得<桥接模式 Bridge>
说真的在此之前,几乎没有对于桥接模式的应用场景概念. 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来 ...
- IOS设计模式浅析之桥接模式(Bridge)
引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上 ...
- C#设计模式系列:桥接模式(Bridge)
1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...
随机推荐
- Can't find keyplane that supports type 4 for keyboard iPhone-Portrait-NumberPad; using 3876877096_Portrait_iPhone-Simple-Pad_Default
在Xcode6下的模拟器点击UITextField控件显示键盘时会显示如下错误提示: Can’t find keyplane that supports type 4 for keyboard iPh ...
- LINQ使用
基于扩展方法和lamda表达式 1. 查询序列中满足一定条件 Where扩展方法 public interface ISlotPortBinding { byte SlotNumber { get; ...
- appcon 图标打包
ERROR ITMS-90022: "Missing required icon file. The bundle does not contain an app icon for iPho ...
- Java基础之读文件——使用通道随机读写文件(RandomReadWrite)
控制台程序,使用通道随机读写primes_backup.bin文件. import static java.nio.file.StandardOpenOption.*; import java.nio ...
- switch为什么不能用string类型?
switch()括号里面的参数是一个int型值啊 你要可以转换为int型的参数才行得通啊
- Swift游戏实战-跑酷熊猫 01 创建工程导入素材
在这节里,我们将建立一个游戏工程,并导入一些必要的素材,例如序列帧动画文件,声音素材文件.动画文件我们使用atlas形式.在打包发布或者模拟器测试的时候,它会将整个.atlas文件夹下的图片打包成一张 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [转]gitHub客户端Desktop的安装使用总结 ---基础篇
gitHub客户端Desktop的安装使用总结 ---基础篇 发表于2015/12/11 11:41:57 8399人阅读 分类: Android之应用实战 这段时间想把我写的东西上传到github ...
- each实现原理
<script> function isEach(arr, callback) { for (var i in arr) { callback(i, arr[i]); } }; funct ...
- Python学习总结8:文件模式及操作方法汇总
文件操作之前需要文件保证文件存在,并且将文件open os.mknod("test.txt") 创建空文件 fp = open("test.txt" ...