一个抽象产生多种具体的实现方式,单纯的通过子类继承会有子类爆炸(过多的子类产生)的现象,系统需要它们之间进行动态耦合。

面向过程:

<?php
    header("content-type:text/html;charset=utf8");
    /**
     * 在一个网站中,我们都有给用户发通知消息的情况。比如有站内发送、    邮箱发送、及短信发送等等。
     * 面向过程形式完成发送。
    */
    //发送信息接口。
    interface info{
       public function send($to,$msg);
    }
    //站内方式发送。
    class zn implements info{
        public function send($to,$con){
            echo "站内给:".$to." 内容是:".$con;
        }
    }
    //邮箱方式发送。
    class email implements info{
        public function send($to,$con){
            echo "email给:".$to." 内容是:".$con;
        }
    }
    //短信方式发送。
    class sms implements info{
        public function send($to,$con){
            echo "短信给:".$to." 内容是:".$con;
        }
    }

    /**
     * 可是如下还有分发送的级别呢?是不是又要继承出多个子类?
     * 站内方式发送【普通】。
     * class znInfo implements info{}
     * 邮箱方式发送【普通】。
     * class emailInfo implements info{}
     * 短信方式发送【普通】。
     * class smsInfo implements info{}
     * ......
     * .........
     *
    */
 ?>

桥接模式:

<?php
    header("content-type:text/html;charset=utf8");
    /**
     * 桥接模式完成发送。
     * 虽然代码有些耦合,但是解决了子类爆炸(过多的现象)。
    */
    //抽象的发送类。
    abstract class info{
        //
        protected $send=null;
        //获得
        public function __construct($send){
            $this->send=$send;
        }
        //加工短信内容方法。
        abstract public function  msg($content);
        //发送信息方法。
        public function send($to,$content){
            $content=$this->msg($content);
            $this->send->send($to,$content);
        }
    }
    //站内发送方式。
    class zn {
        public function send($to,$con){
            echo "站内给:".$to." 内容是:".$con;
        }
    }
    //邮箱发送方式。
    class email {
        public function send($to,$con){
            echo "email给:".$to." 内容是:".$con;
        }
    }
    //短信发送方式。
    class sms {
        public function send($to,$con){
            echo "sms给:".$to." 内容是:".$con;
        }
    }
    //普通发送方式。
    class commonInfo extends info{
        public function msg($con){
            return $con."【普通】";
        }
    }
    //紧急发送方式。
    class warnInfo extends info{
        public function msg($con){
            return $con."【紧急】";
        }
    }
    //特急发送方式。
    class dangerInfo extends info{
        public function msg($con){
            return $con."【特急】";
        }
    }
    //实现发送功能。
    /**
     * 步骤是:
     *     实例化一种发送方式,将实例化后的对象传给发送方式。
     *     发送方式实现了抽象发送类,所以会先将当前对象赋给一个属性。
     *     然后通过调用抽象发送类的 send ,去实现处理信息内容再发送。
    */
    $common=new commonInfo(new zn());
    $common->send("小王","回家啦");
    echo '<hr>';
    $common=new commonInfo(new sms());
    $common->send("小王","回家啦");
?>

最新文章

  1. 配置iis时,浏览项目提示 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
  2. 复制Eclipse工作空间设置
  3. 监控Mysql主从环境下Slave延迟状态的操作记录
  4. Linux之sed命令详解
  5. opencv的实用研究--分析轮廓并寻找边界点
  6. When not to automate 什么时候不进行自动化
  7. 强制关闭myeclipse出现的问题
  8. MongoDB 分片操作
  9. linux命令行模式下实现代理上网(转)
  10. java字节中的基本类型的职业的数目 (采访总是问)
  11. Django中ORM模型总结(一)[概述,查询语句]
  12. 关于select的一个错误---属性选择器
  13. #pragma预处理命令
  14. c++给数组整体赋初值
  15. hadoop streaming 中跑python程序,自定义模块的导入
  16. jQuery-3.事件篇---鼠标事件
  17. C++中的赋值运算符重载函数(operator=)
  18. 入门cout输出的格式(补位和小数精度)
  19. Two Sum ——经典的哈希表的题
  20. 常用的mysql语句

热门文章

  1. nyoj--1058--部分和问题(dfs)
  2. RBAC介绍
  3. Kali linux 2016.2(Rolling)中的payloads模块详解
  4. Ubuntu16.04 Mysql
  5. python 3.x 学习笔记15(多线程)
  6. 51nod 2020 排序相减(暴力解法)
  7. AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)
  8. 优动漫PAINT-百褶裙绘制教程
  9. useradd: cannot open /etc/passwd
  10. [LeetCode] 155. minStack 设计最小栈