外观模式
<本文原载于www.forasp.cn>
php设置模式之外观模式。外观模式是通过在必须的逻辑和方法的集合前创建简单的外观接口,外观设计模式主要是隐藏了来自调用对象的复杂性。
通俗来说:集合多个类的静态方法(来对对象或者数据操作)得到一个类,在新的类中逐个调用对应多个类的静态方法来对对象进行操作,这样隐藏了处理对象的复杂性。这个跟建造者模式及其相似。不同的是目的结果不同,外观模式是为了隐藏调用对象的复杂性,重在调用。而建造者模式是隐藏了创建的复杂性。这两种极其相似。
参考代码:
<?php
#假设当前的基类
class CD
{
public $tracks=array();
public $bank="";
public $title="";
public function __contruct($title,$band,$tracks)
{
$this->title = $title;
$this->band = $band;
$thsi->tracks = $tracks;
}
}
class CDupperCase{
public static function makeString(CD $cd,$type){
$cd->$type = strtoupper($cd->$type);
}
public static function makeArray(CD $cd,$type){
$cd->type = array_map('strtoupper',$cd->$type);//array array_map ( callback $callback , array $arr1 [, array $... ] )array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 转载%77%77%77请%2E%66%6F%72%61%73%70%2E%63%6E注明
}
}
class CDmakeXML{
public static function create(CD $cd){
$doc = new DomDocument();
$root = $doc->createElement('cd');
$root = $doc->appendChild($root);
$title = $doc->createElement('TITLE',$cd->title);
$title = $root->appendChild($title);
$bank = $doc->createElement('BAND',$cd->band);
$band = $root->appendChile($band);
$tracks = $doc->createElement('TRACKS');
$tracks = $root->appendChild($tracks);
foreach($cd->tracks as $track){
$track = $doc->createElement('TRACK',$track);
$track = $tracks->appendChild($track);
}
return $doc->saveXML();//php dom 保存xml文件函数
}
}
//开始阐述问题,一般的假如创建一个cd
$tracksfrom = array("www","forasp","cn");
$title = "weburl";
$band = "webname";
$cd = new CD($title,$band,$tracksfrom);
//当创建xml时必须大写,肯定一般的认为这样
CDUpperCase::makeString($cd,"title");
CDUpperCase::makeString($cd,"title");
CDUpperCase::makeArray($cd,"tracks");
print CDMakeXML::create($cd);
//一般的都是上面的情况,单采用了外观模式,则要穿件一个新的类
class Forcreate{
public static function makeXMLCall(CD $cd){
CDUpperCase::makeString($cd,"title");
CDUpperCase::makeString($cd,"title");
CDUpperCase::makeArray($cd,"tracks");
return CDMakeXML::create($cd);
}
}
//调用的时候如下
print Forcreate::makeXMLCall($cd);
?>
这个外观模式看起来跟建造者模式相似,其中又夹杂这装饰器模式,就是将字符转换成大小写了。
需要仔细理解。以及这么多模式之间的区别
<%77w%77%2E%66%6F%72%61%73%70%2E%63%6E>