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 简单计算器
精彩图集
精彩文章