常見設計模式
阿新 • • 發佈:2020-08-18
1、策略模式
作用:避免使用多重條件語句。
特點:可以替換繼承關係。
實現:定義一系列演算法,將他們用封裝起來,是他們可以互相替換。
<?php
abstract class Strategy{ //抽象策略類
abstract function goToSchool();
}
class Run extends Strategy {//具體策略類
function goToSchool() {
return 'run';
}
}
class Bicycle extends Strategy {
function goToSchool() {
return 'bicycle';
}
}
class Bus extends Strategy {
function goToSchool() {
return 'bus';
}
}
class Student { //策略角色
public function goToSchool($object) {
return $object->goToSchool ();
}
}
$bro = new Student ();
echo $bro->goToSchool(new Bicycle());
2、單例模式
場景:程式應用中,涉及到資料庫操作時,如果每次操作的時候連線資料庫,會帶來大量的資源消耗。可以通過單例模式,建立唯一的資料庫連線物件。
實現:三私一公:私有的靜態變數(存放例項),私有的構造方法(防止建立例項),私有的克隆方法(防止克隆物件),公有的靜態方法(對外界提供例項)
單例模式分3種:懶漢式單例、餓漢式單例、登記式單例。(1.只能有一個例項。2.必須自行建立這個例項。3.必須給其他物件提供這一例項。)
<?php
class Singleton
{
private $name;
private static $_instance; //用來儲存唯一例項
private function __construct(){}//防止使用new建立物件
private function __clone(){}// 防止使用clone床物件
public static function getInstance(){
if(!self::$_instance)self::$_instance = new Singleton();//檢查是否有例項物件
return self::$_instance;
}
public function setName($n){$this->name = $n;}
public function getName(){return $this->name;}
}
$a = Singleton::getInstance();
$b = Singleton::getInstance();
$a->setName("A");
$b->setName("B");
echo $a->getName();//B
echo $b->getName();//B
3、簡單工廠模式(靜態工廠)
特點:用靜態方法代替new操作。
作用:將呼叫物件與建立物件分離,呼叫者直接向工廠請求,減少程式碼的耦合.提高系統的可維護性與可擴充套件性。。
<?php interface pet { public function say(); } class cat implements pet { public function say(){ echo '小貓<br>'; } } class dog implements pet { public function say(){ echo '小狗<br>'; } } class SimpleFactory { // 簡單工廠裡的靜態方法-用於建立小貓物件 static function createCat(){ return new cat(); } // 簡單工廠裡的靜態方法-用於建立小狗物件 static function createDog(){ return new dog(); } } $man = SimpleFactory::createCat(); $man->say(); $woman = SimpleFactory::createDog(); $woman->say();