1. 程式人生 > >PHP面向對象設計模式和設計原則

PHP面向對象設計模式和設計原則

color col 阻止 結果 php面向對象 了解 基類 var_dump image

一、設計模式

  1.單例模式

    目的:讓一個類只能生成一個對象

    步驟: ①將構造函數變成私有的

        ②在類裏面做一個靜態成員函數造對象

        ③在方法裏加限制條件

    //單例模式
    class Ren{                //定義人類
        public static $r;    //設定靜態成員變量,為了可以帶入靜態成員函數中
        public $name;        //普通成員變量,用於測試是否只實例化了一個對象
        private function __construct(){        //
私有化構造函數,阻止實例化對象 } public static function duixiang(){ //創建一個靜態成員函數,用於訪問構造函數以實例化對象 if(empty(self::$r)){ //設定限制條件 self::$r = new Ren(); } return self::$r; //返回$r中的唯一的實例化對象 } }
$r = Ren::duixiang(); //訪問靜態函數實例化對象 $r->name = "張三"; //給對象的$name賦值"張三" $r1 = Ren::duixiang(); //測試是否只有一個對象 var_dump($r1);

    只有一個對象

    技術分享圖片

  

  工廠模式

    目的:做一個專門造對象的工廠

      如果一個父類的子類量比較龐大,子類名命名方式不一致,可以用這種模式以代號方式造對象

    //工廠模式
    class Jisuan{        //定義一個計算父類
        public $a
; //兩個普通成員變量 public $b; public function Js(){ //定義一個計算的普通成員函數 echo"計算結果為"; } public function __construct($a,$b){ //構造函數,用於實例化對象時設定初始的$a和$b的值 $this->a = $a; $this->b = $b; } } class Jia extends Jisuan{ //子類加法 public function Js(){ //子類重寫的計算函數 parent::Js(); return($this->a+$this->b); } } class Jian extends Jisuan{ //子類減法 public function Js(){ //子類重寫的計算函數 parent::Js(); return($this->a-$this->b); } } class Cheng extends Jisuan{ //子類乘法 public function Js(){ //子類重寫的計算函數 parent::Js(); return($this->a*$this->b); } } class Chu extends Jisuan{ //子類除法 public function Js(){ //子類重寫的計算函數 parent::Js(); return($this->a/$this->b); } } class Quyu extends Jisuan{ //子類取余 public function Js(){ //子類重寫的計算函數 parent::Js(); return($this->a%$this->b); } } class GongChang{ //定義一個工廠類,用於生產實例化對象 public static function duixiang($a,$b,$ysf){ //設置靜態成員函數並傳入參數,以運算符號代替子類的名稱 switch($ysf){ //分支較多,用switch case 語句設計不同運算符號所對應不同的子類並實例化對象 case "+"; return new Jia($a,$b); break; case "-"; return new Jian($a,$b); break; case "*"; return new Cheng($a,$b); break; case "/"; return new Chu($a,$b); break; case "%"; return new Quyu($a,$b); break; } } } $j = GongChang::duixiang(3,2,"%"); //測試 echo $j->Js(); //輸出

   輸出結果   技術分享圖片

二、設計六大原則

  1.開-閉原則,講的是設計要對擴展有好的支持,而對修改要嚴格限制。

  2.裏氏代還原則,子類必須能夠替換基類,否則不應當設計為其子類。

  3.依賴倒換原則,設計要依賴於抽象而不是具體化,換句話說就是設計的時候我們要用抽象來思考,而不是一上來就開始劃分我需要哪些哪些類,因為這些是具體。

  4.接口隔離原則,將大的接口打散成多個小接口

  5.單一職責:一個類的功能盡量單一,降低耦合

  6.迪米特法則(最少知識原則),一個對象應當對其他對象有盡可能少的了解,不和陌生人說話

PHP面向對象設計模式和設計原則