單例模式
<?php
/**
三私一公
*私有的靜態(tài)屬性:保存類的單例
*私有的__construct():阻止在類的外部實(shí)例化
*私有的__clone():阻止在類的外部clone對(duì)象
*共有的靜態(tài)方法:獲取類的單例
*/
class MySQLDB {
private static $instance; //保存類的單例
private function __construct() { //阻止在類的外部實(shí)例化
}
private function __clone() { //阻止在類的外部clone對(duì)象
}
//獲取當(dāng)前類的單例
public static function getInstance() {
if(!self::$instance instanceof self)//$instance中保存的不是MySQLDB類的單例就實(shí)例化
self::$instance=new self();
return self::$instance; //返回單例
}
}
//測(cè)試
$db1=MySQLDB::getInstance();
$db2=MySQLDB::getInstance();
var_dump($db1,$db2);
工廠模式
<?php
class ProductsA {
public function show() {
echo '商品A<br>';
}
}
class ProductsB {
public function show() {
echo '商品B<br>';
}
}
//工廠模式
class ProductsFactory {
public static function create($num) { //傳遞不同的參數(shù)獲取不同的對(duì)象
switch($num) {
case 1:
return new ProductsA;
case 2:
return new ProductsB;
default:
return null;
}
}
}
//測(cè)試
$obj1= ProductsFactory::create(1);
$obj2= ProductsFactory::create(2);
$obj1->show(); //商品A
$obj2->show(); //商品B
策略模式
<?php
class Walk {
public function method() {
echo '走著去<br>';
}
}
class Bus {
public function method() {
echo '坐車去<br>';
}
}
class Strategy {
public function way($obj) {
$obj->method(); //傳遞不同的參數(shù)調(diào)用不同的方法
}
}
//測(cè)試
$strategy=new Strategy();
$strategy->way(new Walk);
$strategy->way(new Bus);