php 代码均来源于《PHP设计模式》一书(2)
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 ~ 2KB 下载(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 */
- 上一篇:Nginx 使用nginx和php实时产生缩略图
- 下一篇:php 简单计算器
精彩图集
精彩文章






