外观模式

<?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


你可能感兴趣的:(外观模式)