网站制作学习网经验与学习→正文:外观模式
字体:

外观模式

经验与学习 2010/11/18 17:21:56  点击:不统计

<本文原载于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>

·上一篇:frameset 空白页面 >>    ·下一篇:libchart类下载 >>
推荐文章
最新文章