程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php 設計模式實踐之 策略模式

php 設計模式實踐之 策略模式

編輯:PHP基礎知識
 

首先理解一下策略模式:策略模式針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以 在不影響到客戶端的情況下發生變化。策略模式把行為和環境分開。環境類負責維持和查詢行為類,各種算法在具體的策略類中提供。由於算法和環境獨立開來,算法的增減,修改都不會影響到環境和客戶端。

 

簡單舉個例子來理解一下:現在需要實現一個記錄日志的類,在各種需求面前,這個類可能要求需要記錄幾種格式的文件,如記錄成string/html/xml,在這裡,我們就可以寫日志這個寫操作封裝到一個接口iFormatter裡,iFormatter這個接口就一個函數:format();負責日志消息的格式化功能。

然後,我們將寫string 、html、xml的算法封裝到Formatter_string,Formatter_html,Formatter_xml種,這三個類具有共同的接口iFormatter,。在各自的類中對不同的format()進行定義。

 

 


<?php
header(“Content-type:text/html;charset=utf-8″);
interface iFormatter {
public function format($message);
}
class Formatter_String implements iFormatter {
public function format($message) {
return $message.PHP_EOL;
}

}
class Formatter_XML implements iFormatter {

public function format($message) {
$timestamp = time();
$xml = <<<xml_EOL
<message>
<timestamp>$timestamp</timestamp>
<text>$message</text>
</message>
xml_EOL;
return $xml.PHP_EOL;
}

}

class Formatter_HTML implements iFormatter {

public function format($message) {
$timestamp = time();
$html = <<<html_EOL
<html>
<head>
<title>$timestamp</html>
</head>
<body>$message</body>
</html>
html_EOL;
return $html.PHP_EOL;
}

}

class Logger_File{
private $file = null;
protected $format = null;

public function __construct($formatter,$file){
if(!$formatter instanceof iFormatter){
exit(“不正確的格式”);
}else{
$this->format = $formatter;
$this->file = $file;
}
}
public function write($message){
$message_formatted = $this->format->format($message);
file_put_contents($this->file, array(PHP_EOL, $message_formatted), FILE_APPEND);

}
}
$type = $_GET[‘format’];
$message = $_GET[‘message’];
if(!in_array($type,array(‘string’,’xml’,’html’))){
exit(“不正確的格式”);
}else{
$format = “Formatter_”.strtoupper($type);
$logger = new Logger_File(new $format(), “./tmp/mylog.{$type}”);
$logger->write($message);

}

?>

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved