第 7 章 门面模式

<?php
header("Content-type: text/html; charset=UTF-8");
/**
* 门面模式
*
* 好,我们继续讲课。大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信
* 的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮
* 递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,
* 为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下
* 子发1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必
* 要信息高速我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我就成了。
*/


/**
* 定义一个写信的过程
*/
interface LetterProcess {
    //首先要写信的内容
    public function writeContext($context);
    
    //其次写信封
    public function fillEnvelope($address);
    
    //把信放到信封里
    public function letterInotoEnvelope();
    
    //然后邮递
    public function sendLetter();
}


// 写信过程的具体实现:
/**
* 写信的具体实现了
*/
class LetterProcessImpl implements LetterProcess {
    //写信
    public function writeContext($context) {
        echo "填写信的内容....{$context}<br>";
    }
    
    //在信封上填写必要的信息
    public function fillEnvelope($address) {
        echo "填写收件人地址及姓名....{$address}<br>";
    }
    
    //把信放到信封中,并封好
    public function letterInotoEnvelope() {
        echo "把信放到信封中....<br>";
    }
    
    //塞到邮箱中,邮递
    public function sendLetter() {
        echo "邮递信件...<br>";
    }
}


class ModenPostOffice {
    private $letterProcess = null;
    
    public function __construct(){
        $this->letterProcess = new LetterProcessImpl();
    }
    
    
    //写信,封装,投递,一体化了
    public function sendLetter($context, $address){
        //帮你写信
        $this->letterProcess->writeContext($context);
        
        //写好信封
        $this->letterProcess->fillEnvelope($address);
                
        //把信放到信封中
        $this->letterProcess->letterInotoEnvelope();
        
        //邮递信件
        $this->letterProcess->sendLetter();
    }
}


/**
* 我开始给朋友写信了
*/
class Client {
    
    function __construct(){
        //现代化的邮局,有这项服务,邮局名称叫Hell Road
        $hellRoadPostOffice = new ModenPostOffice();
        
        //你只要把信的内容和收信人地址给他,他会帮你完成一系列的工作;
        $address = "Happy Road No. 666,God Province,Heaven"; //定义一个地址
        $context = "Hello,It's me,do you know who I am? I'm your old lover.I'd like to....";
        $hellRoadPostOffice->sendLetter($context, $address);
    }
}

/**
* 门面模式讲解完毕,这是一个很好的封装方法,一个子系统比较复杂的实话,比如算法或者业务比较
* 复杂,就可以封装出一个或多个门面出来,项目的结构简单,而且扩展性非常好。还有,在一个较大项目
* 中的时候,为了避免人员带来的风险,也可以使用这个模式,技术水平比较差的成员,尽量安排独立的模
* 块(Sub System),然后把他写的程序封装到一个门面里,尽量让其他项目成员不用看到这些烂人的代码,
* 看也看不懂,我也遇到过一个“高人”写的代码,private 方法、构造函数、常量基本都不用,你要一个
* public 方法,好,一个类里就一个public 方法,所有代码都在里面,然后你就看吧,一大坨的程序,看着
* 能把人逼疯,使用门面模式后,对门面进行单元测试,约束项目成员的代码质量,对项目整体质量的提升
* 也是一个比较好的帮助。
*/
new Client();

运行结果:

填写信的内容....Hello,It's me,do you know who I am? I'm your old lover.I'd like to....
填写收件人地址及姓名....Happy Road No. 666,God Province,Heaven
把信放到信封中....
邮递信件...













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值