<?php
//通过在必需的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了来自调用对象的复杂性。
class CD{
public $tracks = [];
public $band = '';
public $title = '';
public function __construct($title, $band, $tracks){
$this->title = $title;
$this->band = $band;
$this->tracks = $tracks;
}
}
$title = 'Waste of a Rib';
$band = 'Never Again';
$tracksFromExternalSource = ['What It Means', 'Brrr', 'Goodbye'];
$cd = new CD($title, $band, $tracksFromExternalSource);
class CDUpperCase{
public static function makeString($cd, $type){
$cd->$type = strtoupper($cd->$type);
}
public static function makeArray($cd, $type){
$cd->type = array_map('strtoupper', $cd->$type);
}
}
class CDMakeXML{
public static function create($cd){
$doc = new DOMDocument();
$root = $doc->createElement('CD');
$root = $doc->appendChild($root);
$title = $doc->createElement('TITLE', $cd->title);
$root->appendChild($title);
$band = $doc->createElement('BAND', $cd->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();
}
}
//CDUpperCase::makeString($cd, 'title');
//CDUpperCase::makeString($cd, 'band');
//CDUpperCase::makeArray($cd, 'tracks');
//echo CDMakeXML::create($cd);
class WebServiceFacade{
public static function makeXMLCall($cd){
CDUpperCase::makeString($cd, 'title');
CDUpperCase::makeString($cd, 'band');
CDUpperCase::makeArray($cd, 'tracks');
$xml = CDMakeXML::create($cd);
return $xml;
}
}
echo WebServiceFacade::makeXMLCall($cd);