設計模式之外觀模式

<?php
/*
 * 外觀:通過在必須的邏輯和方法的集合前創建簡單的外觀接口,外觀設計模式隱藏了來自調用對象的複雜性,封裝了複雜的業務邏輯和調用
 */

class CD{

    public $tracks = array();
    public $band = "";
    public $title = "";

    public function  __construct( $title, $band, $tracks) {
        $this->title = $title;
        $this->band = $band;
        $this->tracks = $tracks;
    }
}

$tracks = array("what it means", "brr", "goodbye");
$title = "waste of a rib";
$band = "never again";

$cd = new CD( $tiltle, $band, $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);
    }
}

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 = $doc->appendChild($title);

        $band = $doc->createElement("band", $cd->band);
        $band = $root->appendChild($band);

        $tracks = $doc->createElement("tracks");
        $tracks = $doc->appendChild( $tracks );

        foreach( $cd->tracks as $track){
            $track = $doc->createElement("track", $track);
            $tracks->appendChild($track);
        }
        return $doc->saveXML();

    }



}


//web服務調用
class WebServiceFacade{

    public static function makexmlCall(CD $cd){

        CDUpperCase::makeString($cd, 'title');
        CDUpperCase::makeString($cd, 'band');
        CDUpperCase::makeArray($cd, 'tracks');

        $xml = CDMakeXml::create($cd);
        return $xml;
    }
}


?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章