PHP面向對象設計模式和設計原則
阿新 • • 發佈:2018-01-11
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面向對象設計模式和設計原則