PHP設(shè)計(jì)模式

設(shè)計(jì)模式就是: 典型場景的典型解決方案。就像是象棋中的:當(dāng)頭炮馬來跳,這也是象棋中的設(shè)計(jì)模式。


開閉原則: 規(guī)定“軟件中的對(duì)象,模塊,函數(shù)等等)應(yīng)該對(duì)于擴(kuò)展是開放的,但是對(duì)于修改是封閉的”,這意味著一個(gè)實(shí)體是允許在不改變它的源代碼的前提下變更它的行為。


  • 工廠模式:
<?php 
interface Animal{
  public function run();
}
class Cat implements Animal
{
  public function run(){
      echo "I ran slowly <br>";
  }
}
class Dog implements Animal
{
  public function run(){
      echo "I'm running fast <br>";
  }
}
abstract class Factory{
  abstract static function createAnimal();
}
class CatFactory extends Factory
{
  public static function createAnimal()
  {
      return new Cat();
  }
}
class DogFactory extends Factory
{
  public static function createAnimal()
  {
      return new Dog();
  }
}

$cat = CatFactory::createAnimal();
$cat->run();

$dog = DogFactory::createAnimal();
$dog->run();

// 如果我們?cè)谙胪卣雇米宇惖刃畔ⅲ?就不需要?jiǎng)又暗拇a邏輯
class Rabbit implements Animal
{
// 實(shí)現(xiàn)動(dòng)物接口中的run方法
   public function run(){
      echo  'im run very very fast';
   }
}
// 聲明兔子工廠類 繼承抽象工廠類
class RabbitFactory extends Factory
{
   public  static function createAnimal()
   {
      return new Rabbit();
   }
}
$rabbit = RabbitFactory::createAnimal();
echo $rabbit->run();

  • 單例模式:
    最經(jīng)典的案例就是開發(fā)程序的時(shí)候,往往要操作很多次數(shù)據(jù)庫,根據(jù)數(shù)據(jù)庫句柄鏈接數(shù)據(jù)庫的行為,使用單例模式可以大大減少 new 的操作。因?yàn)槊看?new 操作都會(huì)消耗大量的系統(tǒng)資源。
<?php
class Mysql
{
    // 私有化成員屬性 保存實(shí)例
    private static $instance;
    // 私有化構(gòu)造函數(shù),防止創(chuàng)建對(duì)象,也就是防止 new
    private function __construct()
    {
        mysqli_connect($this->db_host,$this->db_user,$this->db_pwd) or die("Could not Connect MySql Server");
    }
    // 私有化克隆方法 防止對(duì)象被賦值
    private function __clone()
    {   
    }
    // 開放一個(gè)公共方法 來創(chuàng)建對(duì)象
    public static function getInstance()
    {
        //判斷此成員屬性是否是該類的實(shí)例。
        if(!(self::$instance instanceof self)){
            self::$instance = new self;
        }
        return self::$instance;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容