<?php /** * @author v.r And * * @example * 外观模式 * 经过在必要的逻辑和方法的集合建立简单外观接口,外观设计模式隐藏了来自调用对象的复杂性 * 实际点 * 基于外观设计模式的类可能提供执行一个逻辑业务请求的公共接口。为了完成这个单独的业务请求 * 可能须要执行多个技术逻辑步骤 * * 数据输出 json与XML格式 * @copyright copyright information * */ class CD { public $tracks = array(); //曲目 public $band = ''; //乐队 public $title = ''; //标题 public function __construct($title='',$band='',$tracks=array()) { # code... $this->title = $title; $this->band = $band; $this->tracks = $tracks; } } $tracks = array('the word' ,'Ghost trow','goods very' ); $title = 'waste Rib o '; $band = 'Never Again'; $cd = new CD(); class CDUpperCase { static public function makestring(CD $cd,$types) { $key = array_keys($types); $value = array_values($types); $type = $key[0]; $value =$value[0]; $cd->$type = strtoupper($value); } static public function makeArray(CD $cd,$types) { $key = array_keys($types); $value = array_values($types); $type = $key[0]; $value = $value[0]; $cd->$type = array_map('strtoupper', $value); } } class CDMakeXML { static public 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); $band = $doc->createElement('BAND',$cd->band); $band = $root->appendChild($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(); } } class CDMakeJSON { static public function create(CD $cd) { return json_encode(get_object_vars($cd)); } } CDUpperCase :: makestring($cd,array('title'=>'waste Rib o')); CDUpperCase :: makestring($cd,array('band'=>'Never Again')); CDUpperCase :: makeArray($cd,array('tracks'=>array('the word' ,'Ghost trow','goods very'))); $xml = CDMakeXML :: create($cd); # 外观 class WebServiceFacade { static public function makeXML(CD $cd) { # code... CDUpperCase :: makestring($cd,array('title'=>'waste Rib o')); CDUpperCase :: makestring($cd,array('band'=>'Never Again')); CDUpperCase :: makeArray($cd,array('tracks'=>array('the word' ,'Ghost trow','goods very'))); return CDMakeXML :: create($cd); } static public function makeJSON(CD $cd) { CDUpperCase :: makestring($cd,array('title'=>'waste Rib o')); CDUpperCase :: makestring($cd,array('band'=>'Never Again')); CDUpperCase :: makeArray($cd,array('tracks'=>array('the word' ,'Ghost trow','goods very'))); return CDMakeJSON :: create($cd); # code... } } $xml = WebServiceFacade :: makeXML(new CD); $json = WebServiceFacade :: makeJSON(new CD); var_dump($xml); var_dump($json); #end script