龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 代码均来源于《PHP设计模式》一书(2)

时间:2015-04-01 15:48来源:网络整理 作者:网络 点击:
分享到:
Facade.class.phpnbsp;~nbsp;2KBnbsp;nbsp;nbsp;nbsp;下载(25) ?php/** * 转自 《PHP设计模式》 第八章: 外观模式 * 外观设计模式的目标是: 控制外部错综复杂的关系,

Facade.class.php ~ 2KB    下载(25)

<?php
/**
 * 转自 《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;

/* End of Facade.class.php */
/* Location the file Design/Facade.class.php */

Factory.class.php&nbsp;~&nbsp;2KB&nbsp;&nbsp;&nbsp;&nbsp;下载(26)

<?php
/**
 * 转自 《PHP设计模式》 第九章: 工厂模式
 * 工厂设计模式: 提供获取某个对象的新实例的一个接口, 同时使调用代码避免确定实际实例化基类的步骤
 *
 */
//基础标准CD类
class CD {

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

    public function __construct() {}

    public function setTitle($title) {
        $this->title    = $title;
    }

    public function setBand($band) {
        $this->band     = $band;
    }

    public function addTrack($track) {
        $this->tracks[] = $track;
    }

}

//增强型CD类, 与标准CD的唯一不同是写至CD的第一个track是数据track("DATA TRACK")
class enhadcedCD {

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

    public function __construct() {
        $this->tracks   = "DATA TRACK";
    }

    public function setTitle($title) {
        $this->title    = $title;
    }

    public function setBand($band) {
        $this->band     = $band;
    }

    public function addTrack($track) {
        $this->tracks[] = $track;
    }
}

//CD工厂类,实现对以上两个类具体实例化操作
class CDFactory {

    public static function create($type) {
        $class = strtolower($type) . "CD";

        return new $class;
    }
}

//实例操作
$type = "enhadced";

$cd   = CDFactory::create($type);

$tracksFromExternalSource = array("What It Means", "Brr", "Goodbye");

$cd->setBand("Never Again");
$cd->setTitle("Waste of a Rib");
foreach ($tracksFromExternalSource as $track) {
    $cd->addTrack($track);
}

/* End of Factory.class.php */
/* End of file Design/Factory.class.php */
精彩图集

赞助商链接