外观设计模式

    外观模式是一种十分简单的概念,它只是为一个分层或者子系统创建一个单一的入口。这会带来许多好处。首先,有助于分离项目中的不同部分,其次,对于客户端的开发者来说,访问代码变得简洁。另外,由于在一个地方调用子系统,减少了出错的可能性。


<?php
/**
 * 代码示例: 获取CD对象,对其所有属性应用大写形式,并且创建一个要提交给Web服务的,格式完整的XML文档。
 */
class CD {

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

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

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 = $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 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;
    }
}

$tracksFromExternalSource = array("What It Means", "Brr", "Goodbye");
$band  = "Never Again";
$title = "Waster of a Rib";
$cd = new CD($tracksFromExternalSource, $band, $title);
$xml = WebServiceFacade::makeXMLCall($cd);
echo $xml;
?>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值