複製代碼 代碼如下:<?php /** * 裝飾模式 * * 動態給一個對象添加一些額外的職責,就擴充功能而言比產生子類方式更為靈活 */ header("Content-type:text/html;charset=utf-8"); abstract class MessageBoardHandler { public function __construct(){} abstract public function filter($msg); } class MessageBoard
複製代碼 代碼如下:<?php /** * Factory 方法模式 * * 定義一個用於建立對象的介面,讓子類決定將哪一個類執行個體化,使用一個類的執行個體化延遲到其子類 */ /* class DBFactory { public static function create($type) { swtich($type) { case "Mysql": return new MysqlDB(); break; case "Postgre": return new PostgreDB()
複製代碼 代碼如下:<?php /** * 策略模式(Strategy.php) * * 定義一系列演算法,把它們一個個封裝起來,並且使它們可相互替換,使用得演算法的變化可獨立於使用它的客戶 * */ // ---以下是一系列演算法的封閉---- interface CacheTable { public function get($key); public function set($key,$value); public function del($key); } // 不使用緩衝
複製代碼 代碼如下:<?php /** * 代理模式 * * 為其他對象提供一個代理以控制這個對象的訪問 * */ interface Proxy { public function request(); public function display(); } class RealSubject { public function request() { echo "RealSubject request<br/>"; } public function display()
複製代碼 代碼如下:<?php /** * 組合模式 * * 將對象組合成樹形結構以表示"部分-整體"的階層,使得客戶對單個對象和綜合物件的使用具有一致性 */ abstract class MenuComponent { public function add($component){} public function remove($component){} public function getName(){} public function getUrl(){}
複製代碼 代碼如下:<?php /** * 狀態模式 * * 允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它所屬的類 * */ interface State { public function handle($state); public function display(); } class Context { private $_state = null; public function __construct($state) {
複製代碼 代碼如下:<?php /** * 橋接模式 * * 將抽象部份與它實現部分分離,使用它們都可以有獨立的變化 */ abstract class Implementor { abstract public function operation(); } class ConcreteImplementorA extends Implementor { public function operation() { echo "ConcreteImplementorA Operation&