【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>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...
随机推荐
- MVC项目实践,在三层架构下实现SportsStore-10,连接字符串的加密和解密
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- 一般处理程序使用Session的方法
1 引用这个命名空间 using System.Web.SessionState; 2 实现这两个接口中的任何一个 IReadOnlySessionState //此接口只能使用session,无 ...
- bootstrap学习之三—插件
一.模态框(modal)插件 1)为要触发模态框的组件添加data-toggle="modal",data-target="对应ID" 2)使用一个div实现m ...
- maven 无法安装plugin的问题
spring有一个入门例子,在docker里跑spring-boot程序 下载后按照教程执行mvn package docker:build.并不能成功.会报错. [ERROR] No plugin ...
- html中表格table的内容居中显示
align——表示左右居中——left,center,right valign——控制上下居中——left,center,right <td> 标签内加入: vertical-align ...
- 从零开始攻略PHP(4)——数组的使用
1.数组的概念 数组就是一个用来存储一系列变量值的命名区域. 每个数组元素有一个相关的索引(也成为关键字),它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 ...
- 转:python socket编程详细介绍
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- yii框架中应用jquery表单验证插件
效果图: 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- 夺命雷公狗ThinkPHP项目之----企业网站4之数据库连接
我们众所周知,我们在开发的时候网站是需要连接上我们的数据库的,毕竟数据库是网站的最核心之一嘛,废话不多说直接开干.... 我们先找到:config.php文件对她进行修改,因为我们网站前后台都用到数据 ...
- 夺命雷公狗ThinkPHP项目之----企业网站2之数据库的快速设计
我们在一个项目的时候,花费最多事件的估计还是数据库的时间了,我们的数据库暂时就这样设计好了: 暂时我们的数据库就这样设计好了用下先,建好后如下所示: