<?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();
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
把信放到信封中....
邮递信件...