1. 程式人生 > 實用技巧 >常見設計模式

常見設計模式

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();