/** *簡單工廠模式與工廠方法模式比較。 *簡單工廠又叫靜態工廠方法模式,這樣理解可以確定,簡單工廠模式是通過一個靜態方法創建對象的。 */interface people { function jiehun();}class man implements people{ function jiehun() { echo '送玫瑰,送戒指!<br>'; }} class women implements people { function jiehun() { echo '穿婚紗!<br>'; }} class SimpleFactoty { // 簡單工廠里的靜態方法 static function createMan() { return new man; } static function createWomen() { return new women; } } $man = SimpleFactoty::createMan();$man->jiehun();$man = SimpleFactoty::createWomen();$man->jiehun();
工廠方法模式:
<?php/* *工廠方法模式: *定義一個創建對象的接口,讓子類決定哪個類實例化。 他可以解決簡單工廠模式中的封閉開放原則問題。<www.phpddt.com整理> */interface people { function jiehun();}class man implements people{ function jiehun() { echo '送玫瑰,送戒指!<br>'; }} class women implements people { function jiehun() { echo '穿婚紗!<br>'; }} interface createMan { // 注意了,這里是簡單工廠本質區別所在,將對象的創建抽象成一個接口。 function create(); }class FactoryMan implements createMan{ function create() { return new man; }}class FactoryWomen implements createMan { function create() { return new women; }} class Client { // 簡單工廠里的靜態方法 function test() { $Factory = new FactoryMan; $man = $Factory->create(); $man->jiehun(); $Factory = new FactoryWomen; $man = $Factory->create(); $man->jiehun(); }} $f = new Client;$f->test();
抽象工廠模式:
<?php/*抽象工廠:提供一個創建一系列相關或相互依賴對象的接口。 注意:這里和工廠方法的區別是:一系列,而工廠方法則是一個。那么,我們是否就可以想到在接口create里再增加創建“一系列”對象的方法呢?*/interface people { function jiehun();}class Oman implements people{ function jiehun() { echo '區別: